并提前感谢您的帮助:)
以下是我试图解决的问题:
我有一个类型(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 = ???
我想知道在这种情况下是否可以使用类型类。我可能错过了某种类型的伎俩......或者我可以使用哪种语言扩展?
谢谢!
答案 0 :(得分:1)
如果你想&#34;魔术起来&#34;一个基于运行时信息的实例声明,这可以通过reflection
库来实现,虽然它有一些相当深刻的魔力并且可能有更好的方法:https://www.fpcomplete.com/user/thoughtpolice/using-reflection