使用cassava包,以下代码可以编译:
{-# LANGUAGE DeriveGeneric #-}
import Data.Csv
import GHC.Generics
data Foo = Foo { foo :: Int } deriving (Generic)
instance ToNamedRecord Foo
但是以下内容不符合:
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
import Data.Csv
import GHC.Generics
data Foo = Foo { foo :: Int } deriving (Generic, ToNamedRecord)
编译器报告:test.hs:7:50:
No instance for (ToNamedRecord Int)
arising from the first field of ‘Foo’ (type ‘Int’)
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (ToNamedRecord Foo)
这让我有两个问题:第二个版本为什么不与第一个相同?编译器为什么希望找到 ToNamedRecord Int
的一个实例?
DeriveAnyClass
有任何有用的作用。但是,我确实看到它会产生编译时崩溃。我认为这个功能存在缺陷。 - dfeuer