import Language.Symantic.Lib.Tuple2 (tyTuple2)
-- * Class 'Sym_NonNull'
-type instance Sym (Proxy NonNull) = Sym_NonNull
+type instance Sym NonNull = Sym_NonNull
class Sym_NonNull term where
fromNullable :: MonoFoldable o => term o -> term (Maybe (NonNull o))
toNullable :: MonoFoldable o => term (NonNull o) -> term o
instance (Sym_NonNull term, Sym_Lambda term) => Sym_NonNull (BetaT term)
-- Typing
+instance NameTyOf NonNull where
+ nameTyOf _c = ["NonNull"] `Mod` "NonNull"
instance FixityOf NonNull
instance TypeInstancesFor NonNull where
- expandFamFor c len f (TyApp _ z o `TypesS` TypesZ)
+ expandFamFor c len f (z:@o `TypesS` TypesZ)
| Just HRefl <- proj_ConstKi @_ @Element f
, Just HRefl <- proj_ConstKiTy @_ @NonNull z
= expandFamFor c len f (o `TypesS` TypesZ)
expandFamFor _c _len _fam _as = Nothing
instance ClassInstancesFor NonNull where
- proveConstraintFor _ (TyApp _ tq@(TyConst _ _ q) (TyApp _ c o))
+ proveConstraintFor _ (tq@(TyConst _ _ q) :$ c:@o)
| Just HRefl <- proj_ConstKiTy @_ @NonNull c
= case () of
_ | Just Refl <- proj_Const @Eq q
- , Just Dict <- proveConstraint (tq `tyApp` o) -> Just Dict
+ , Just Dict <- proveConstraint (tq`tyApp`o) -> Just Dict
| Just Refl <- proj_Const @MT.MonoFoldable q
- , Just Dict <- proveConstraint (tq `tyApp` o) -> Just Dict
+ , Just Dict <- proveConstraint (tq`tyApp`o) -> Just Dict
| Just Refl <- proj_Const @MT.MonoFunctor q
- , Just Dict <- proveConstraint (tq `tyApp` o) -> Just Dict
+ , Just Dict <- proveConstraint (tq`tyApp`o) -> Just Dict
| Just Refl <- proj_Const @Ord q
- , Just Dict <- proveConstraint (tq `tyApp` o) -> Just Dict
+ , Just Dict <- proveConstraint (tq`tyApp`o) -> Just Dict
| Just Refl <- proj_Const @SemiSequence q
- , Just Dict <- proveConstraint (tq `tyApp` o) -> Just Dict
+ , Just Dict <- proveConstraint (tq`tyApp`o) -> Just Dict
| Just Refl <- proj_Const @Show q
- , Just Dict <- proveConstraint (tq `tyApp` o) -> Just Dict
+ , Just Dict <- proveConstraint (tq`tyApp`o) -> Just Dict
_ -> Nothing
proveConstraintFor _c _q = Nothing
-- Compiling
instance Gram_Term_AtomsFor src ss g NonNull
-instance (Source src, Inj_Sym ss NonNull) => ModuleFor src ss NonNull where
+instance (Source src, SymInj ss NonNull) => ModuleFor src ss NonNull where
moduleFor = ["NonNull"] `moduleWhere`
[ "fromNullable" := teNonNull_fromNullable
, "toNullable" := teNonNull_toNullable