我有以下,类型检查:
p_int = liftA read (many (char ' ') *> many1 digit <* many (char ' '))
现在,正如函数名所暗示的,我希望它给我一个 Int。但如果我这样做:
p_int = liftA read (many (char ' ') *> many1 digit <* many (char ' ')) :: Int
我收到这种类型的错误:
Couldn't match expected type `Int' with actual type `f0 b0'
In the return type of a call of `liftA'
In the expression:
liftA read (many (char ' ') *> many1 digit <* many (char ' ')) ::
Int
In an equation for `p_int':
p_int
= liftA read (many (char ' ') *> many1 digit <* many (char ' ')) ::
Int
有没有一种更简单、更简洁的方法来解析可能有空格的整数?或者有办法解决这个问题?
最终,我希望这成为以下内容的一部分:
betaLine = string "BETA " *> p_int <*> p_int <*> p_int <*>
p_int <*> p_parallel <*> p_exposure <* eol
这是解析如下所示的行:
BETA 6 11 5 24 -1 oiiio
所以我最终可以调用一个需要这些值的 BetaPair 构造函数(一些作为 Int,一些作为其他类型,如 [Exposure] 和 Parallel)
(如果你好奇,这是一个文件格式的解析器,它代表蛋白质中的氢键 β 链对等。我无法控制文件格式!)