Используя cassava пакет, следующий компилирует:В чем разница между `DeriveAnyClass` и пустым экземпляром?
{-# 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