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 :: forall i. Alignable i => i
initialAlign = coerce :: forall a b. Coercible a b => a -> b
coerce (Int
0 :: Int)

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

numIncrements :: Alignable i => i -> Int
numIncrements :: forall i. Alignable i => i -> Int
numIncrements = coerce :: forall a b. Coercible a b => a -> b
coerce

newtype Inst = Inst Int

instance Alignable Inst