我收到错误
*** 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无法解析字符串?
答案 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的行为有所不同,我得到了一个关于模糊类型变量的编译时错误。