gpt4 book ai didi

haskell - 在 Haskell 中,当我们使用 do block 时,它如何确定要使用哪个 monad?

转载 作者:行者123 更新时间:2023-12-01 07:06:29 24 4
gpt4 key购买 nike

我们知道 do block 只是语法糖。但是,它如何确定它在哪个单子(monad)上下文中呢?假设我们不使用 <- do block 中任何位置的运算符。

最佳答案

它使用相同的通用类型类机制来确定 +使用甚至是什么数字类型用于文字。那是,
就像是

 do
return True

不会预测它应该使用的特定 monad,而只是分配类型 Monad m => m Bool .此约束表示 do-block 的类型为 m Bool对于任何 m恰好实现了 Monad类型类。此外,每当使用此 block 时,将从其使用的上下文中推断出特定的实例。

如果我们使用绑定(bind)到特定 Monad 的运算符,这将迫使类型变得更加具体。例如,如果我们使用 modify :: (a -> a) -> State s a -> State s () (为了示例,我正在简化类型)然后这将强制 block 具有类型 State s ... .一般来说,Haskell 会找出最通用的类​​型,并利用类型类约束来确保所讨论的类型实现了适当的操作。

关于haskell - 在 Haskell 中,当我们使用 do block 时,它如何确定要使用哪个 monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300679/

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