2

并提前感谢您的帮助:)

这是我要解决的问题:

我有一个类型(MyType),我为它写了一个 JSON 解析器(使用 aeson 库),这个解析器依赖于另一个值(Config):

import Data.Aeson

data MyType = MyType Text
data Config = Config Text

parseMyType :: Config -> Value -> Parser MyType
parseMyType (Config f) (Object o) = do (String v) <- o .: f
                                       return $ MyType v

真正FromJSON为它写一个实例......但parseJSON唯一取决于Value(不能有配置):

instance FromJSON MyType where

    parseJSON :: Value -> Parser MyType
    parseJSON = ???

我想知道在这种情况下是否可以使用类型类。我可能错过了一些类型技巧......或者我可以使用语言扩展?

谢谢!

4

1 回答 1

1

如果您想根据运行时信息“魔术”一个实例声明,这可以通过reflection库来实现,尽管它是一些相当深刻的魔术并且可能有更好的方法:https ://www.fpcomplete.com/user/思想警察/使用反思

于 2015-04-06T17:54:27.030 回答