有没有一个包能够大致完成以下功能:
给定一条记录:
给定一条记录:
data R = R { a :: TypeA,
b :: TypeB,
c :: TypeC }
生成一个提升的记录:
data R_L f = R_L { a_L :: f TypeA,
b_L :: f TypeB,
c_L :: f TypeC }
并提供了一些类似于以下示例和函数的功能:
instance (Monoid (f TypeA), Monoid (f TypeB), Monoid (f TypeC))
=> (Monoid (R_L f)) where
mempty = R_L mempty mempty mempty
mplus a b = ...fieldwise mplus...
sequenceR :: (Monad m) => R_L m -> m R
sequenceR = ... run fields, sum results ...
sequenceRA :: (Applicative m) => R_L m -> m R
sequenceRA x = R <$> a_L x <*> b_L x <*> c_L x
还有其他的库可以提供这种功能吗?如果没有,使用哪种机制(TH?Generics?)来实现最好?
f
的种类是* -> *
。可以使用MonadPlus
,这是你的意思吗? - leftaroundabout