gpt4 book ai didi

haskell - "monadic function"的正式定义

转载 作者:行者123 更新时间:2023-12-02 01:52:33 25 4
gpt4 key购买 nike

维基说:

monadic functions (i.e. functions that use values from the monad as their arguments or return value).



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

作者说:

A monadic function is a function that produces a monadic value. (Note that we said nothing about its input type)





Functions of the form f :: a -> m b, where a is the type of the inner value of the monad. (Call these classic monadic functions)

Functions of the form f :: anything -> m b, where the input of the function really doesn't matter. (Call these loose monadic functions)



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

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

最佳答案

我明白你引用this article in Wikipedia

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

示例:假设您有一个 MapMap s代表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 Hooglelookup :: 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 -> bm 的上下文中将被称为 comonadic作为一个共生者。
我找到了 this great SO answer about algebra/coalgebra非常有启发性,因为它最终在类型和应用方面解释了 monad 和 comonad。

希望这可以帮助

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com