【发布时间】:2021-05-12 12:48:12
【问题描述】:
做完之后
>import Text.ParserCombinators.Parsec
和
>data Tag = MkTag String deriving Show
我有这个功能
parseDiv = do
string "<div>"
return (MkTag "div")
我想将它转换为 ghci 的 1 班轮。我本可以使用 :{ ... :} 但想了解它为什么不起作用。这是第一行
>let parseDiv = do { string "<div>";return $ MkTag "div" }
<interactive>:7:5: error:
* Non type-variable argument
in the constraint: Text.Parsec.Prim.Stream s m Char
(Use FlexibleContexts to permit this)
* When checking the inferred type
parseDiv :: forall s (m :: * -> *) u.
Text.Parsec.Prim.Stream s m Char =>
Text.Parsec.Prim.ParsecT s u m Tag
如果我在多行中定义它,它会起作用。
【问题讨论】:
-
如错误所说,您需要启用
FlexibleContexts语言编译指示,将其限制为Stream s m Char。 -
谢谢,不幸的是,我在 ghci 中添加了 {-# LANGUAGE FlexibleContexts #-} 并尝试再次执行 1 行,但得到了相同的结果。
-
您不能在
ghci中写入,对于ghci,您可以使用:set -XFlexibleContexts设置它。编译指示适用于 Haskell file.