不知道Applicative是不是通过MonadTransformer的Monad自然衍生出来的

问题描述 投票:0回答:0

从类型约束的角度来看,Monad是从Applicative派生出来的,这和我在题目中写的是相反的。 但是,这不是错误。 在研究Monad的时候,我检查了下面所有的关系,看是否满足。 具体来说,我总是检查 Applicative(和 Functor)是否自然地从 Monad 派生。

// 0. Monad -> Monad
join mma = mma >>= id

ma >> mb = ma >>= const mb

// 1. Moand -> Applicative
mf <*> ma = do
            x <- mf
            y <- ma
            return (x y)

pure = return

// 2. Monad -> Functor

fmap f ma = ma >>= return . f

// 3. Applicative -> Applicative
fa *> fb = pure (const id) <*> fa <*> fb

// 4. Applicative -> Functor
f <$> fa = pure f <*> fa

// 5. Applicative -> Monoid (for Monoid a)
mempty = pure mempty
fa <> fa' = (<>) <$> fa <*> fa'

// 6. Foldable -> Foldable
foldr f z ta = (foldMap f ta) z  // f :: a -> (b -> b). We consider (b -> b) as Endo monoid
foldMap f ta = foldr (\x y -> f x <> y) mempty ta

// 7. Traversable -> Functor
fmap f ta = runIdentity $ traverse (Identity . f) ta

// 8. Traversable -> Foldable
foldMap f ta = getConstant $ traverse (Constant . f) ta

很酷。 我检查了所有的 Monad,以便所有实例(Monad、Functor、Applicative、Monoid、Foldable、Traversable)都具有相同的上下文。

万物和谐,遵循以上0~9法则。 Maybe, Either, List, Reader, Writer, State, Constant, Products of arbitrary number of types with duplicated types 等......

现在,我终于进入了现在正在看的书里的Monad Transformers章节

我有麻烦了。

我无法检查 MaybeT 的 Applicative 实例是否与 MaybeT 的 Monad 实例对齐。

实际上,除了 IdentityT,我所有的 MonadTransformer 都失败了。


MaybeT mMf :: MaybeT m (a -> b)
MaybeT mMa :: MaybeT m a
mMf :: m (Maybe (a -> b))
mMa :: m (Maybe a)


MaybeT $ (<*>) <$> (MaybeT mMf) <*> mMa == do
                                           x <- mMf
                                           y <- mMa
                                           return (x y)  // is this true???

//given
MaybeT mMx :: MaybeT m x
mMx :: m (Maybe x)

f :: x -> MaybeT m y

MaybeT mMx >>= f =
  MaybeT $ do
    Mx <- mMx
    case Mx of
      Nothing -> return Nothing
      Just x -> runMaybeT (f x)


return = pure

pure = MaybeT . pure . pure

我可以得到一些帮助来确保 MaybeT 的 Applicative 与 MaybeT 的 Monad 在相同的上下文中吗?

haskell monads monad-transformers applicative
© www.soinside.com 2019 - 2024. All rights reserved.