私は次のものを持っています、それはタイプチェックです:
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などの他のタイプ)
(興味があれば、これは、とりわけ、タンパク質の水素結合したベータストランドペアを表すファイル形式のパーサーです。ファイル形式を制御することはできません!)