module Language.Parser.Ptera.Data.Alignable (
    T,
    Alignable,
    initialAlign,
    nextAlign,
    numIncrements,
    Inst (..),
) where

import           Language.Parser.Ptera.Prelude


type T = Alignable

class Coercible Int i => Alignable i

initialAlign :: Alignable i => i
initialAlign :: i
initialAlign = Int -> i
coerce (Int
0 :: Int)

nextAlign :: Alignable i => i -> i
nextAlign :: i -> i
nextAlign = (Int -> Int) -> i -> i
coerce (Int -> Int
forall a. Enum a => a -> a
succ :: Int -> Int)

numIncrements :: Alignable i => i -> Int
numIncrements :: i -> Int
numIncrements = i -> Int
coerce

newtype Inst = Inst Int

instance Alignable Inst