我收到错误
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)
我跑的时候
read $ show $ Vector3 1 2 3
Run Code Online (Sandbox Code Playgroud)
(注意show Vector3 1 2 3返回"Vector3 {v3x = 1.0, v3y = 2.0, v3z = 3.0}".)
我正在使用AC-Vector软件包以及其他软件包
{#- LANGUAGE StandaloneDeriving #-}
deriving instance Read Vector3
Run Code Online (Sandbox Code Playgroud)
因为原始包不会自动导出Read.
为什么read无法解析字符串?
该值read $ show $ Vector3 1 2 3是多态的:它有类型Read a => a而没有约束a,编译器不会Vector3按预期选择.
这对我有用AC-Vector-2.3.2:
read $ show $ Vector3 1 2 3 :: Vector3
Run Code Online (Sandbox Code Playgroud)
您的特定症状由结果类型默认为某种不同类型触发.我可以在GHC 7.8.3上使用没有类型签名来重现运行时故障-XExtendedDefaultRules,这可能是因为它默认a为().
令人惊讶的是GHC 7.6.3表现不同,我得到一个关于模糊类型变量的编译时错误.