相关疑难解决方法(0)

不是Functor/Functor/Applicative/Monad的好例子?

在向某人解释什么是类型类X时,我很难找到正好是X的数据结构的好例子.

所以,我请求示例:

  • 一个不是Functor的类型构造函数.
  • 一个类型构造函数,它是一个Functor,但不是Applicative.
  • 一个类型构造函数,它是Applicative,但不是Monad.
  • Monad的类型构造函数.

我认为Monad到处都有很多例子,但Monad的一个很好的例子与之前的例子有一些关系可以完成图片.

我寻找彼此相似的示例,区别仅在于属于特定类型类的重要方面.

如果有人能够设法在这个层次结构的某个地方隐藏一个Arrow的例子(它是在Applicative和Monad之间吗?),那也会很棒!

monads haskell functor applicative

202
推荐指数
5
解决办法
1万
查看次数

可折叠,Monoid和Monad

考虑以下签名 foldMap

foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
Run Code Online (Sandbox Code Playgroud)

这与"绑定"非常相似,只是交换了参数:

(>>=) :: Monad m => m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

在我看来,有因此必须有某种关系的Foldable,MonoidMonad,但在超我找不到它.据推测,我可以将其中的一个或两个转换为另一个,但我不确定如何.

这种关系可以详细说明吗?

haskell category-theory foldable

25
推荐指数
3
解决办法
1988
查看次数

具有遍历的任意monad的构成是否始终为monad?

如果我有两个单子mn,和n是穿越,我一定有复合m-over- n单子?

更正式的,这就是我的想法:

import Control.Monad
import Data.Functor.Compose

prebind :: (Monad m, Monad n) =>
         m (n a) -> (a -> m (n b)) -> m (n (m (n b)))
mnx `prebind` f = do nx <- mnx
                     return $ do x <- nx
                                 return $ f x

instance (Monad m, Monad n, Traversable n) => Monad (Compose m n) where
  return = Compose . return . return
  Compose mnmnx >>= f …
Run Code Online (Sandbox Code Playgroud)

monads haskell

17
推荐指数
2
解决办法
783
查看次数

如何将Monad实例定义为具有多个值的类型?

多个值我的意思是这样的:

data Foo a = Bar a | Baz a a
Run Code Online (Sandbox Code Playgroud)

我想不出一个明确的方式来定义>>=Baz:

instance Monad Foo where
    Bar x   >>= f = f x -- Great, that works perfectly!
    Baz x y >>= f = ??? -- What the heck do I even put here?
Run Code Online (Sandbox Code Playgroud)

haskell

7
推荐指数
1
解决办法
499
查看次数