import Language.Symantic.Lib.Monoid (tyMonoid)
-- * Class 'Sym_MonoFoldable'
-type instance Sym (Proxy MonoFoldable) = Sym_MonoFoldable
+type instance Sym MonoFoldable = Sym_MonoFoldable
class Sym_MonoFoldable term where
ofoldMap :: (MonoFoldable o, Monoid m) => term (MT.Element o -> m) -> term o -> term m
ofoldr :: MonoFoldable o => term (MT.Element o -> b -> b) -> term b -> term o -> term b
instance (Sym_MonoFoldable term, Sym_Lambda term) => Sym_MonoFoldable (BetaT term)
-- Typing
+instance NameTyOf MonoFoldable where
+ nameTyOf _c = ["MonoFoldable"] `Mod` "MonoFoldable"
instance FixityOf MonoFoldable
instance ClassInstancesFor MonoFoldable
instance TypeInstancesFor MonoFoldable
-- Compiling
instance Gram_Term_AtomsFor src ss g MonoFoldable
-instance (Source src, Inj_Sym ss MonoFoldable) => ModuleFor src ss MonoFoldable where
- moduleFor _s = ["MonoFoldable"] `moduleWhere`
+instance (Source src, SymInj ss MonoFoldable) => ModuleFor src ss MonoFoldable where
+ moduleFor = ["MonoFoldable"] `moduleWhere`
[ "ofoldMap" := teMonoFoldable_ofoldMap
, "otoList" := teMonoFoldable_otoList
, "ofoldr" := teMonoFoldable_ofoldr
teMonoFoldable_ofoldMap :: TermDef MonoFoldable '[Proxy o, Proxy e, Proxy m] (MonoFoldable o # Monoid m # e #~ MT.Element o #> ((e -> m) -> o -> m))
teMonoFoldable_ofoldMap = Term (tyMonoFoldable o0 # tyMonoid m # e1 #~ famElement o0) ((e1 ~> m) ~> o0 ~> m) $ teSym @MonoFoldable $ lam2 ofoldMap
where
- m :: Source src => Inj_Len vs => Inj_Kind (K m) => Type src (Proxy a ': Proxy b ': Proxy m ': vs) m
+ m :: Source src => LenInj vs => KindInj (K m) => Type src (Proxy a ': Proxy b ': Proxy m ': vs) m
m = tyVar "m" $ VarS $ VarS varZ
teMonoFoldable_otoList :: TermDef MonoFoldable '[Proxy o, Proxy e] (MonoFoldable o # e #~ MT.Element o #> (o -> [MT.Element o]))
teMonoFoldable_ofoldr :: TermDef MonoFoldable '[Proxy o, Proxy e, Proxy a] (MonoFoldable o # e #~ MT.Element o #> ((e -> a -> a) -> a -> o -> a))
teMonoFoldable_ofoldr = Term (tyMonoFoldable o0 # e1 #~ famElement o0) ((e1 ~> a ~> a) ~> a ~> o0 ~> a) $ teSym @MonoFoldable $ lam1 $ \f -> lam $ lam . ofoldr f
where
- a :: Source src => Inj_Len vs => Inj_Kind (K a) => Type src (Proxy _a ': Proxy b ': Proxy a ': vs) a
+ a :: Source src => LenInj vs => KindInj (K a) => Type src (Proxy _a ': Proxy b ': Proxy a ': vs) a
a = tyVar "a" $ VarS $ VarS varZ
teMonoFoldable_ofoldl' :: TermDef MonoFoldable '[Proxy o, Proxy e, Proxy a] (MonoFoldable o # e #~ MT.Element o #> ((a -> e -> a) -> a -> o -> a))
teMonoFoldable_ofoldl' = Term (tyMonoFoldable o0 # e1 #~ famElement o0) ((a ~> e1 ~> a) ~> a ~> o0 ~> a) $ teSym @MonoFoldable $ lam1 $ \f -> lam $ lam . ofoldl' f
where
- a :: Source src => Inj_Len vs => Inj_Kind (K a) => Type src (Proxy _a ': Proxy b ': Proxy a ': vs) a
+ a :: Source src => LenInj vs => KindInj (K a) => Type src (Proxy _a ': Proxy b ': Proxy a ': vs) a
a = tyVar "a" $ VarS $ VarS varZ
teMonoFoldable_olength :: TermDef MonoFoldable '[Proxy o, Proxy e] (MonoFoldable o # e #~ MT.Element o #> (o -> Int))