维基说:
我的理解是一个函数需要或返回一个 monad 是 monadic 函数,但是当我遇到这个 blog 时它似乎有更严格的定义
作者说:
和
似乎定义非常严格和正式,但我找不到任何关于 classic monadic functions 、 loose monadic functions 的地方。
那么究竟什么是一元函数呢?
最佳答案
我明白你引用了 this article in Wikipedia
在您的上下文中,“monadic 函数”表示您将编写更大的函数,利用 (>>=)
和 return
完成的隐式上下文处理。
示例:假设您有 Map
的 Map
来表示 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/