{-# LANGUAGE DeriveDataTypeable, KindSignatures, PolyKinds, ScopedTypeVariables,
TypeApplications, TypeFamilies, TypeFamilyDependencies, UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
module Language.Modula2.Abstract (Ident, IdentList, BaseType, ConstExpression, Priority,
Wirthy(..), CoWirthy(..), Nameable(..), Modula2(..),
RelOp(..), WirthySubsetOf(..), Maybe3(..), just3, maybe3, nothing3) where
import Data.Data (Data, Typeable)
import qualified Data.Kind as K (Type)
import Data.List.NonEmpty
import Data.Text (Text)
import Language.Oberon.Abstract
type Priority l = ConstExpression l
class Wirthy l => Modula2 l where
type Export l = x | x -> l
type Definition l = (d :: K.Type -> (K.Type -> K.Type) -> (K.Type -> K.Type) -> K.Type) | d -> l
type Variant l = (v :: K.Type -> (K.Type -> K.Type) -> (K.Type -> K.Type) -> K.Type) | v -> l
definitionModule :: Ident -> [Import l'] -> Maybe (Export l') -> [f (Definition l' l' f' f')] -> Module l l' f' f
implementationModule,
programModule :: Ident -> Maybe (f (Priority l' l' f' f')) -> [Import l'] -> f (Block l' l' f' f')
-> Module l l' f' f
moduleExport :: Bool -> NonEmpty Ident -> Export l
moduleImport :: Maybe Ident -> NonEmpty Ident -> Import l
constantDefinition :: IdentDef l' -> f (ConstExpression l' l' f' f') -> Definition l l' f' f
typeDefinition :: IdentDef l' -> Maybe (f (Type l' l' f' f')) -> Definition l l' f' f
variableDefinition :: IdentList l' -> f (Type l' l' f' f') -> Definition l l' f' f
procedureDefinition :: f (ProcedureHeading l' l' f' f') -> Definition l l' f' f
moduleDeclaration :: Ident -> Maybe (f (Priority l' l' f' f'))
-> [Import l'] -> Maybe (Export l') -> f (Block l' l' f' f') -> Declaration l l' f' f
procedureHeading :: Ident -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading l l' f' f
caseFieldList :: Maybe Ident -> QualIdent l' -> NonEmpty (f (Variant l' l' f' f')) -> [f (FieldList l' l' f' f')]
-> FieldList l l' f' f
variant :: NonEmpty (f (CaseLabels l' l' f' f')) -> [f (FieldList l' l' f' f')] -> Variant l l' f' f
enumeration :: IdentList l' -> Type l l' f' f
subRange :: Maybe (QualIdent l') -> f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f')
-> Type l l' f' f
arrayType :: [f (Type l' l' f' f')] -> f (Type l' l' f' f') -> Type l l' f' f
setType :: f (Type l' l' f' f') -> Type l l' f' f
recordType :: [f (FieldList l' l' f' f')] -> Type l l' f' f
withStatement :: f (Designator l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement l l' f' f
forStatement :: Ident -> f (Expression l' l' f' f') -> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f')) -> f (StatementSequence l' l' f' f')
-> Statement l l' f' f
set :: Maybe (QualIdent l') -> [f (Element l' l' f' f')] -> Expression l l' f' f
qualIdent :: [Ident] -> Ident -> QualIdent l
instance Wirthy l => Modula2 (WirthySubsetOf l) where
type Export (WirthySubsetOf l) = Maybe (Export l)
type Definition (WirthySubsetOf l) = Maybe3 (Definition l)
type Variant (WirthySubsetOf l) = Maybe3 (Variant l)
definitionModule :: forall l' (f :: * -> *) (f' :: * -> *).
Ident
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
definitionModule = ([Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> ([Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> (Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ ([f (Definition l' l' f' f')] -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> ([f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f)
-> Maybe (Export l')
-> [f (Definition l' l' f' f')]
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Module l) l' f' f
-> [f (Definition l' l' f' f')] -> Maybe3 (Module l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Module l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
implementationModule :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
implementationModule = (Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> (Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ ([Import l']
-> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([Import l']
-> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> ([Import l']
-> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> (f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Module l) l' f' f
-> f (Block l' l' f' f') -> Maybe3 (Module l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Module l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
programModule :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
programModule = (Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> (Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ ([Import l']
-> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([Import l']
-> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> ([Import l']
-> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f)
-> (f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f)
-> [Import l']
-> f (Block l' l' f' f')
-> Module (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Module l) l' f' f
-> f (Block l' l' f' f') -> Maybe3 (Module l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Module l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
moduleExport :: Bool -> NonEmpty Ident -> Export (WirthySubsetOf l)
moduleExport = (NonEmpty Ident -> Export (WirthySubsetOf l))
-> Bool -> NonEmpty Ident -> Export (WirthySubsetOf l)
forall a b. a -> b -> a
const ((NonEmpty Ident -> Export (WirthySubsetOf l))
-> Bool -> NonEmpty Ident -> Export (WirthySubsetOf l))
-> (NonEmpty Ident -> Export (WirthySubsetOf l))
-> Bool
-> NonEmpty Ident
-> Export (WirthySubsetOf l)
forall a b. (a -> b) -> a -> b
$ Maybe (Export l) -> NonEmpty Ident -> Maybe (Export l)
forall a b. a -> b -> a
const Maybe (Export l)
forall a. Maybe a
Nothing
moduleImport :: Maybe Ident -> NonEmpty Ident -> Import (WirthySubsetOf l)
moduleImport = (NonEmpty Ident -> Import (WirthySubsetOf l))
-> Maybe Ident -> NonEmpty Ident -> Import (WirthySubsetOf l)
forall a b. a -> b -> a
const ((NonEmpty Ident -> Import (WirthySubsetOf l))
-> Maybe Ident -> NonEmpty Ident -> Import (WirthySubsetOf l))
-> (NonEmpty Ident -> Import (WirthySubsetOf l))
-> Maybe Ident
-> NonEmpty Ident
-> Import (WirthySubsetOf l)
forall a b. (a -> b) -> a -> b
$ Maybe (Import l) -> NonEmpty Ident -> Maybe (Import l)
forall a b. a -> b -> a
const Maybe (Import l)
forall a. Maybe a
Nothing
constantDefinition :: forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l'
-> f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f
constantDefinition = (f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f)
-> IdentDef l'
-> f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f)
-> IdentDef l'
-> f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f)
-> (f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f)
-> IdentDef l'
-> f (ConstExpression l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Definition l) l' f' f
-> f (ConstExpression l' l' f' f') -> Maybe3 (Definition l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Definition l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
typeDefinition :: forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l'
-> Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f
typeDefinition = (Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f)
-> IdentDef l'
-> Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f)
-> IdentDef l'
-> Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f)
-> (Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f)
-> IdentDef l'
-> Maybe (f (Type l' l' f' f'))
-> Definition (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Definition l) l' f' f
-> Maybe (f (Type l' l' f' f')) -> Maybe3 (Definition l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Definition l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
variableDefinition :: forall l' (f :: * -> *) (f' :: * -> *).
IdentList l'
-> f (Type l' l' f' f') -> Definition (WirthySubsetOf l) l' f' f
variableDefinition = (f (Type l' l' f' f') -> Definition (WirthySubsetOf l) l' f' f)
-> IdentList l'
-> f (Type l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Type l' l' f' f') -> Definition (WirthySubsetOf l) l' f' f)
-> IdentList l'
-> f (Type l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f)
-> (f (Type l' l' f' f') -> Definition (WirthySubsetOf l) l' f' f)
-> IdentList l'
-> f (Type l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Definition l) l' f' f
-> f (Type l' l' f' f') -> Maybe3 (Definition l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Definition l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
procedureDefinition :: forall (f :: * -> *) l' (f' :: * -> *).
f (ProcedureHeading l' l' f' f')
-> Definition (WirthySubsetOf l) l' f' f
procedureDefinition = Maybe3 (Definition l) l' f' f
-> f (ProcedureHeading l' l' f' f')
-> Maybe3 (Definition l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Definition l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
moduleDeclaration :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
moduleDeclaration = (Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> (Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ ([Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> ([Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Maybe (f (Priority l' l' f' f'))
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (Maybe (Export l')
-> f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f)
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (Export l')
-> f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f)
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> (Maybe (Export l')
-> f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f)
-> [Import l']
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f)
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f)
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> (f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f)
-> Maybe (Export l')
-> f (Block l' l' f' f')
-> Declaration (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Declaration l) l' f' f
-> f (Block l' l' f' f') -> Maybe3 (Declaration l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Declaration l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
procedureHeading :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f
procedureHeading = (Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f)
-> (Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f)
-> Ident
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (ProcedureHeading l) l' f' f
-> Maybe (f (FormalParameters l' l' f' f'))
-> Maybe3 (ProcedureHeading l) l' f' f
forall a b. a -> b -> a
const Maybe3 (ProcedureHeading l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
caseFieldList :: forall l' (f :: * -> *) (f' :: * -> *).
Maybe Ident
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
caseFieldList = (QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> Maybe Ident
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> Maybe Ident
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> (QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> Maybe Ident
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> (NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> QualIdent l'
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ ([f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> ([f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f)
-> NonEmpty (f (Variant l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> FieldList (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (FieldList l) l' f' f
-> [f (FieldList l' l' f' f')] -> Maybe3 (FieldList l) l' f' f
forall a b. a -> b -> a
const Maybe3 (FieldList l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
variant :: forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (CaseLabels l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> Variant (WirthySubsetOf l) l' f' f
variant = ([f (FieldList l' l' f' f')] -> Variant (WirthySubsetOf l) l' f' f)
-> NonEmpty (f (CaseLabels l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> Variant (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([f (FieldList l' l' f' f')]
-> Variant (WirthySubsetOf l) l' f' f)
-> NonEmpty (f (CaseLabels l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> Variant (WirthySubsetOf l) l' f' f)
-> ([f (FieldList l' l' f' f')]
-> Variant (WirthySubsetOf l) l' f' f)
-> NonEmpty (f (CaseLabels l' l' f' f'))
-> [f (FieldList l' l' f' f')]
-> Variant (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Variant l) l' f' f
-> [f (FieldList l' l' f' f')] -> Maybe3 (Variant l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Variant l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
enumeration :: forall l' (f' :: * -> *) (f :: * -> *).
IdentList l' -> Type (WirthySubsetOf l) l' f' f
enumeration = Maybe3 (Type l) l' f' f
-> NonEmpty (IdentDef l') -> Maybe3 (Type l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Type l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
subRange :: forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
subRange = (f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> Maybe (QualIdent l')
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> Maybe (QualIdent l')
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> (f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> Maybe (QualIdent l')
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> (f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Type l) l' f' f
-> f (ConstExpression l' l' f' f') -> Maybe3 (Type l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Type l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
arrayType :: forall (f :: * -> *) l' (f' :: * -> *).
[f (Type l' l' f' f')]
-> f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f
arrayType = (f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f)
-> [f (Type l' l' f' f')]
-> f (Type l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f)
-> [f (Type l' l' f' f')]
-> f (Type l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f)
-> (f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f)
-> [f (Type l' l' f' f')]
-> f (Type l' l' f' f')
-> Type (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Type l) l' f' f
-> f (Type l' l' f' f') -> Maybe3 (Type l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Type l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
setType :: forall (f :: * -> *) l' (f' :: * -> *).
f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f
setType = Maybe3 (Type l) l' f' f
-> f (Type l' l' f' f') -> Maybe3 (Type l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Type l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
recordType :: forall (f :: * -> *) l' (f' :: * -> *).
[f (FieldList l' l' f' f')] -> Type (WirthySubsetOf l) l' f' f
recordType = Maybe3 (Type l) l' f' f
-> [f (FieldList l' l' f' f')] -> Maybe3 (Type l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Type l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
withStatement :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
withStatement = (f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Designator l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Designator l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> (f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Designator l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Statement l) l' f' f
-> f (StatementSequence l' l' f' f')
-> Maybe3 (Statement l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Statement l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
forStatement :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forStatement = (f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> (f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> (f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> (Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ (f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const ((f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> (f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f)
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Statement l) l' f' f
-> f (StatementSequence l' l' f' f')
-> Maybe3 (Statement l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Statement l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
set :: forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f
set = ([f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f)
-> Maybe (QualIdent l')
-> [f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f
forall a b. a -> b -> a
const (([f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f)
-> Maybe (QualIdent l')
-> [f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f)
-> ([f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f)
-> Maybe (QualIdent l')
-> [f (Element l' l' f' f')]
-> Expression (WirthySubsetOf l) l' f' f
forall a b. (a -> b) -> a -> b
$ Maybe3 (Expression l) l' f' f
-> [f (Element l' l' f' f')] -> Maybe3 (Expression l) l' f' f
forall a b. a -> b -> a
const Maybe3 (Expression l) l' f' f
forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> *} {a :: k1}
{b :: k2} {c :: k3}.
Maybe3 f a b c
nothing3
qualIdent :: [Ident] -> Ident -> QualIdent (WirthySubsetOf l)
qualIdent = (Ident -> QualIdent (WirthySubsetOf l))
-> [Ident] -> Ident -> QualIdent (WirthySubsetOf l)
forall a b. a -> b -> a
const ((Ident -> QualIdent (WirthySubsetOf l))
-> [Ident] -> Ident -> QualIdent (WirthySubsetOf l))
-> (Ident -> QualIdent (WirthySubsetOf l))
-> [Ident]
-> Ident
-> QualIdent (WirthySubsetOf l)
forall a b. (a -> b) -> a -> b
$ Maybe (QualIdent l) -> Ident -> Maybe (QualIdent l)
forall a b. a -> b -> a
const Maybe (QualIdent l)
forall a. Maybe a
Nothing