{-# LANGUAGE DeriveDataTypeable, KindSignatures, PolyKinds,
TypeFamilies, TypeFamilyDependencies, UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
module Language.Modula2.ISO.Abstract (Modula2(..)) where
import Data.Data (Data, Typeable)
import Data.List.NonEmpty
import Data.Text (Text)
import qualified Language.Modula2.Abstract as Report
import Language.Modula2.Abstract hiding (Modula2)
class Report.Modula2 l => Modula2 l where
type AddressedIdent l = (d :: * -> (* -> *) -> (* -> *) -> *) | d -> l
type Item l = (i :: * -> (* -> *) -> (* -> *) -> *) | i -> l
emptyVariant :: Variant l l' f' f
addressedVariableDeclaration :: NonEmpty (f (AddressedIdent l' l' f' f')) -> f (Type l' l' f' f')
-> Declaration l l' f' f
forwardProcedureDeclaration :: f (ProcedureHeading l' l' f' f') -> Declaration l l' f' f
exceptionHandlingBlock :: [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f'))
-> Block l l' f' f
addressedIdent :: Ident -> f (ConstExpression l' l' f' f') -> AddressedIdent l l' f' f
unaddressedIdent :: Ident -> AddressedIdent l l' f' f
packedSetType :: f (Type l' l' f' f') -> Type l l' f' f
retryStatement :: Statement l l' f' f
array :: Maybe (QualIdent l') -> [f (Item l' l' f' f')] -> Expression l l' f' f
record :: Maybe (QualIdent l') -> [f (Expression l' l' f' f')] -> Expression l l' f' f
remainder :: f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
single :: f (Expression l' l' f' f') -> Item l l' f' f
repeated :: f (Expression l' l' f' f') -> f (ConstExpression l' l' f' f') -> Item l l' f' f
instance Wirthy l => Modula2 (WirthySubsetOf l) where
type AddressedIdent (WirthySubsetOf l) = Maybe3 (AddressedIdent l)
type Item (WirthySubsetOf l) = Maybe3 (Item l)
emptyVariant :: forall l' (f' :: * -> *) (f :: * -> *).
Variant (WirthySubsetOf l) l' f' f
emptyVariant = forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
addressedVariableDeclaration :: forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (AddressedIdent l' l' f' f'))
-> f (Type l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f
addressedVariableDeclaration = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
forwardProcedureDeclaration :: forall (f :: * -> *) l' (f' :: * -> *).
f (ProcedureHeading l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forwardProcedureDeclaration = forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
exceptionHandlingBlock :: forall (f :: * -> *) l' (f' :: * -> *).
[f (Declaration l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block (WirthySubsetOf l) l' f' f
exceptionHandlingBlock = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
addressedIdent :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> f (ConstExpression l' l' f' f')
-> AddressedIdent (WirthySubsetOf l) l' f' f
addressedIdent = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
unaddressedIdent :: forall l' (f' :: * -> *) (f :: * -> *).
Ident -> AddressedIdent (WirthySubsetOf l) l' f' f
unaddressedIdent = forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
packedSetType :: forall (f :: * -> *) l' (f' :: * -> *).
f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f
packedSetType = forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
retryStatement :: forall l' (f' :: * -> *) (f :: * -> *).
Statement (WirthySubsetOf l) l' f' f
retryStatement = forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
array :: forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression (WirthySubsetOf l) l' f' f
array = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
record :: forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f
record = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
remainder :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Expression (WirthySubsetOf l) l' f' f
remainder = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
single :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Item (WirthySubsetOf l) l' f' f
single = forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
repeated :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Item (WirthySubsetOf l) l' f' f
repeated = forall a b. a -> b -> a
const forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3