维基说:



我的理解是一个函数需要或返回一个 monad 是 monadic 函数,但是当我遇到这个 blog 时它似乎有更严格的定义

作者说:







似乎定义非常严格和正式,但我找不到任何关于 classic monadic functionsloose monadic functions 的地方。

那么究竟什么是一元函数呢?

最佳答案

我明白你引用了 this article in Wikipedia

在您的上下文中,“monadic 函数”表示您将编写更大的函数,利用 (>>=)return 完成的隐式上下文处理。

示例:假设您有 MapMap 来表示 4 种组合的输出值
"aa"-> 1, "ab"-> 2, "bc"-> 3, "bd"-> 4

import Data.Map (Map, lookup, fromList)

type Map1 = Map Char Int
v1 = fromList [('a',1),('b',2)]    :: Map1
v2 = fromList [('c',3),('d',4)]    :: Map1

type Map2 = Map Char Map1
myMap = fromList [('a',v1),('b',v2)]   :: Map2

Your best friend Hoogle 表示 lookup :: Ord k => k -> Map k a -> Maybe a
这里 lookup 是所谓的“一元函数” 必须组合(这里是与它自己)以给出一个 :: Char -> Char -> Map2 -> Maybe Int 类型的函数
composedLookup a b m = do
        v  <- lookup a m
        v' <- lookup b v
        return v'

或者
composedLookup' a b m = lookup a m >>= (lookup b)

编辑 :m a -> b 类型的函数在 m 是一个 comonad 的上下文中将被称为 comonadic。
我发现 this great SO answer about algebra/coalgebra 很有启发性,因为它最终从类型和应用的角度解释了 monad 和 comonad。

希望这可以帮助

关于haskell - "monadic function"的正式定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21857738/

10-10 22:52