Control.Monad.Morph
包括
class MFunctor t where
hoist :: Monad m => (forall a. m a -> n a) -> t m b -> t n b
据我所知,所包含的实例都没有使用Monad m
约束。怎么可能这样做?是否有使用约束的有效实例(考虑到hoist id = id
,我有点难以想象如何?)约束对m
而非n
的重要性是什么?
答案 0 :(得分:7)
@RequestParam("birthdayTime") String birthdayTime
@RequestParam("birthdayReminder") String reminderTag
是pipes的衍生产品,所以我猜它是因为Control.Monad.Morph
的{{1}}实例需要它...当然,它是used there。
MFunctor
我认为不需要这样做。 Proxy
是instance MFunctor (Proxy a' a b' b) where
hoist nat p0 = go (observe p0)
where
go p = case p of
Request a' fa -> Request a' (\a -> go (fa a ))
Respond b fb' -> Respond b (\b' -> go (fb' b'))
M m -> M (nat (m >>= \p' -> return (go p')))
Pure r -> Pure r
。它可能应该是m >>= return . f
约束,并且该代码早于monad-applicative提案的实现。