我正在尝试用 Haskell 编写一个解析器,但我对它的替代定义有问题(Functor、Applicative 和 Monad 已完成并正在工作):
instance Alternative Parser where
empty = P (\env input -> [])
p <|> q = P (\env input -> case parse p env input of
[] -> parse q env input
[(env, v, out)]-> [(env, v, out)])
Run Code Online (Sandbox Code Playgroud)
一旦我使用 Stack (stack build; stack run;) 编译,我就会收到这些错误,包括空运算符和 <|> 运算符:
`empty' is not a (visible) method of class `Alternative'
`<|>' is not a (visible) method of class `Alternative'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
您需要导入empty并<|>实现它们:
import Control.Applicative (Alternative, empty, (<|>))
Run Code Online (Sandbox Code Playgroud)
或者,也可以通过导入Control.Applicative合格来避免将它们纳入范围:
import Control.Applicative (Alternative)
import qualified Control.Applicative
Run Code Online (Sandbox Code Playgroud)