我有以下代码:
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
实现是一个append
。但是,如果我评估没有任何类型修饰符的
coin
,它会输出0
。为什么?解释器将coin
转换为哪种类型来评估它?这段代码摘自:http://homes.sice.indiana.edu/ccshan/rational/S0956796811000189a.pdf