根据我在这里提出的问题的精神,(Generically) Build Parsers from custom data types? @danidiaz提供了一个非常有效的解决方案。
我想做更多这样的事情:如果f
是HasParser
的实例,则f
的列表也是HasParser
的实例}。或者在Haskell中,那是
instance (HasParser f) => HasParser [f] where
getParser = many' (getParser @f)
好吧,这不会编译。我收到以下错误消息:
错误:不在范围内:输入变量'f'
我不熟悉这些语言扩展的语法。特别是@
与Proxy
的使用总是让我感到困惑。希望有人能告诉我在哪里可以找到最好的文档。
答案 0 :(得分:2)
您需要ScopedTypeVariables
。
{-# LANGUAGE ScoperTypeVariables, UnicodeSyntax #-}
instance ∀ f . HasParser f => HasParser [f] where
getParser = many' (getParser @f)
(ASCII语法instance forall f . HasParser ...
也有效。)