相关疑难解决方法(0)

Haskell中MonadPlus的默认类型评估是什么?

我有以下代码:

import Control.Monad

coin :: MonadPlus m => m Int
coin = return 0 `mplus` return 1
Run Code Online (Sandbox Code Playgroud)

如果我对coin :: Maybe Int解释器进行评估,它会受到影响Just 0.这是正常的,因为Maybe的实现是MonadPlus的实例.

如果我coin :: [Int]在解释器上进行评估,则打印出来[0, 1],因为mplus列表的实现是一个append.

但如果我评估coin,没有任何类型装饰器,它打印0.为什么?口译员"转换"什么类型coin来评估它?

此代码摘自:http://homes.sice.indiana.edu/ccshan/rational/S0956796811000189a.pdf

monads haskell non-deterministic

6
推荐指数
1
解决办法
118
查看次数

应用消失?

pure我对其 Applicative 实例未指定的情况下的行为有点困惑。在此示例中,我希望在应用上下文中结果值为数字 5:

Prelude> pure 5 :: Applicative t => t Integer
5
Prelude> :t it
it :: Integer
Run Code Online (Sandbox Code Playgroud)

相反,它只是一个普通的整数。

如果指定了应用实例,如以下示例所示,则返回的值是应用类型,正如我所期望的:

Prelude> pure 5 :: Maybe Integer
Just 5
Prelude> :t it
it :: Maybe Integer
Run Code Online (Sandbox Code Playgroud)

为什么Applicative t第一个例子中的 似乎消失了?

似乎未指定的应用上下文被剥离以用于最终评估以打印到输出,但我想知道这的规则是什么。

haskell ghci

3
推荐指数
1
解决办法
85
查看次数

标签 统计

haskell ×2

ghci ×1

monads ×1

non-deterministic ×1