在我的Yesod网络应用程序中,我有以下数据类型:
data SensorType = TemperatureSensor | HumiditySensor deriving (Eq, Show, Read, PathPiece, PersistField)
我启用GeneralizedNewtypeDeriving
关于自动导出PathPiece
的答案:
What typeclasses need to be defined for a Yesod path?
但是我得到了ghc-error:
Can't make a derived instance of `PathPiece SensorType
`PathPiece' is not a derivable class
是否可以自动导出PathPiece
?我做错了什么?
{0}存在PersistField
。那么derivePersistField
呢?
答案 0 :(得分:2)
GeneralizedNewtypeDeriving
仅对导出newtype
的实例有用。它通过在newtype包装器上提升底层类型的实例来工作。
您的类型不是newtype
,因此无法解除PathPiece
个实例。
答案 1 :(得分:1)
根据path-pieces package没有做类似的事情或我能找到的任何代码on Github,它看起来不太可能。我会像这样实现PathPiece
类型类(使用优等前奏中的tshow
和readMay
):
instance PathPiece SensorType where
toPathPiece = tshow
fromPathPiece = readMay