它ä¸æ˜¯å•å­ï¼Œä½†å®ƒæ˜¯ä»€ä¹ˆï¼Ÿ

时间:2013-06-10 23:30:34

标签: haskell monads category-theory

According to the Haskell wikibook,å为Monadçš„{​​{1}}是m,还有两项é¢å¤–çš„æ“作:

Functor

这很好,但我有些ä¸åŒã€‚对血腥细节进行ç€è‰²ï¼Œæˆ‘的类型具有良好的unit :: a -> m a join :: m (m a) -> m a å’Œunit函数,但其​​join表现ä¸ä½³ï¼ˆfmapä¸ä¸€å®šæ˜¯{{1} })。因此,它ä¸èƒ½æˆä¸ºfmap g . fmap f的实例。尽管如此,我还是希望尽å¯èƒ½å¤šåœ°æ供通用功能。

所以我的问题是,什么类别的ç†è®ºç»“构与monad相似,因为他们有fmap (g.f)å’ŒMonad?

我æ„识到在æŸç§ç¨‹åº¦ä¸Šï¼Œä¸Šè¿°é—®é¢˜æ˜¯ä¸æ˜Žç¡®çš„。对于monad,unitå’Œjoin定义仅对unit定义有æ„义。如果没有join,则无法定义任何monad法律,因此fmap / fmap的任何定义都åŒæ ·â€œæœ‰æ•ˆâ€ã€‚所以我正在寻找除unit以外的函数,在这些joinå’Œfmap函数中定义一些“éžmonadâ€å®šå¾‹å¯èƒ½æ˜¯æœ‰æ„义的。

1 个答案:

答案 0 :(得分:3)

这里åªæœ‰unitå’Œjoin的法律。给定x :: m a,

join (unit x) = x

为了è¯æ˜Žè¿™ä¸ä»…仅是从无到有,让我们从现有的monad法开始:

return x >>= f = f x

鉴于m >>= f = join (fmap f m)

join (fmap f (return x)) = f x

选择f = id

join (fmap id (return x)) = id x

使用fmap id = id

的仿函数法
join (id (return x)) = id x

使用明显的id a = a

join (return x) = x
相关问题