【发布时间】:2020-08-31 11:48:13
【问题描述】:
我刚才在 Haskell 中做一些代码高尔夫,我遇到了一个当时对我没有多大意义的错误。决定在 GHCi 中检查一下,现在我真的很困惑。
λ> :t replicate <$> readLn
replicate <$> readLn :: IO (a -> [a])
λ> f <- replicate <$> readLn
-- I type 4 and press Enter
λ> :t f
f :: GHC.Types.Any -> [GHC.Types.Any]
为什么f 不是a -> [a] 类型?我当然可以unsafeCoerce,但那是冗长而可怕的。
【问题讨论】:
-
我认为这是由于 monomorphism restriction 但我对 Haskell 的理解不够好,无法解释。 This question 解释了一个类似的案例(但不够接近,不能重复)。
-
@Gilles'SO-stopbeingevil',这实际上更多的是关于禁言类型,而不是关于多态限制。无论如何,默认情况下 GHCi 中的单态限制是关闭的。
标签: haskell types ghc coercion