考虑 Haskell 函数
test :: ST s [Int]
test = do
arr <- newListArray (0,9) [0..9] :: ST s (STArray s Int Int)
let f i = do writeArray arr i (2*i)
readArray arr i
forM [1,2] f
和
test' :: ST s [Int]
test' = do
arr <- newListArray (0,9) [0..9] :: ST s (STArray s Int Int)
let f = \i -> do writeArray arr i (2*i)
readArray arr i
forM [1,2] f
第一个需要 FlexibleContexts 在 ghci 8.10.1 上编译,第二个编译没有额外的选项。为什么?
s
特别欢迎根据类型变量的范围解释这种行为的答案。作为后续,可以将什么(如果有)类型签名添加到函数中以在没有 FlexibleContexts的情况下f
进行编译?test
最后,与单态限制有联系吗?