我有两个函数,但其中一个函数只从另一个函数调用,所以我想内联辅助函数.我的代码看起来像这样:
data PoS = N | V | Adj | Adv | Phr
posEntity :: Parser PoS
posEntity =
do pos <- string "N." <|>
string "V." <|>
string "Adj." <|>
string "Adv." <|>
string "Phr."
return (posToPoS pos)
<?> "part of speech"
posToPoS pos
| pos == "N." = N
| pos == "V." = V
| pos == "Adj." = Adj
| pos == "Adv." = Adv
| pos == "Phr." = Phr
Run Code Online (Sandbox Code Playgroud)
显然posToPoS应该内联,但我不确定做这样的事情所需的语法.
谢谢!
您可以将定义中的字符串内联到posToPos:
posToPoS "N." = N
posToPoS "V." = V
-- ... etc
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接在解析器中使用以下方法:
import Control.Applicative hiding (<|>)
posEntity :: Parser PoS
posEntity =
(string "N." *> pure N <|>
string "V." *> pure V <|>
string "Adj." *> pure Adj <|>
string "Adv." *> pure Adv <|>
string "Phr." *> pure Phr)<?> "part of speech"
Run Code Online (Sandbox Code Playgroud)
(您可能需要string "foo" *> pure Foo部件周围的问题,我忘记了运算符的优先级)