我有以下代码:
import Control.Monad
coin :: MonadPlus m => m Int
coin = return 0 `mplus` return 1
如果我对coin :: Maybe Int
解释器进行评估,它会优先级Just 0
。这是正常的,因为将 Maybe 实现为 MonadPlus 的实例。
如果我对解释器进行评估coin :: [Int]
,它会打印[0, 1]
,因为mplus
on list 的实现是append
.
coin
但是,如果我在没有任何类型装饰器的情况下评估0
. 为什么?解释器“转换”什么类型coin
来评估它?
此代码摘自:http ://homes.sice.indiana.edu/ccshan/rational/S0956796811000189a.pdf