我该如何内联此功能?

Max*_*Max 3 haskell parsec

我有两个函数,但其​​中一个函数只从另一个函数调用,所以我想内联辅助函数.我的代码看起来像这样:

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应该内联,但我不确定做这样的事情所需的语法.

谢谢!

dfl*_*str 8

您可以将定义中的字符串内联到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部件周围的问题,我忘记了运算符的优先级)