Prelude.read:没有解析派生的实例

时间:2014-08-25 17:17:05

标签: haskell

我收到错误

*** Exception: Prelude.read: no parse

当我跑

read $ show $ Vector3 1 2 3

(请注意,show Vector3 1 2 3会返回"Vector3 {v3x = 1.0, v3y = 2.0, v3z = 3.0}"。)

我正在使用AC-Vector包以及其他

{#- LANGUAGE StandaloneDeriving #-}
deriving instance Read Vector3

因为原始包不会自动导出。

为什么read无法解析字符串?

1 个答案:

答案 0 :(得分:6)

read $ show $ Vector3 1 2 3是多态的:它的类型为Read a => a,没有约束a,编译器不会按预期选择Vector3

这适用于我AC-Vector-2.3.2

read $ show $ Vector3 1 2 3 :: Vector3

您的特定症状是由默认为某种不同类型的结果类型触发的。我可以使用-XExtendedDefaultRules在GHC 7.8.3上重现您没有类型签名的运行时故障,这可能是因为它默认a()

令人惊讶的是,GHC 7.6.3的行为有所不同,我得到了一个关于模糊类型变量的编译时错误。