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

sda*_*das 2 haskell

我收到错误

*** 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无法解析字符串?

GS *_*ica 6

该值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表现不同,我得到一个关于模糊类型变量的编译时错误.