I have the following: check type:
p_int = liftA read (many (char ' ') *> many1 digit <* many (char ' '))
Now, as the name of the function implies, I want it to give me Int. But if I do this:
p_int = liftA read (many (char ' ') *> many1 digit <* many (char ' ')) :: Int
I get an error of this type:
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
Is there an easier and clearer way to parse integers that may have spaces? Or a way to fix it?
Ultimately, I want this to be part of the following:
betaLine = string "BETA " *> p_int <*> p_int <*> p_int <*>
p_int <*> p_parallel <*> p_exposure <* eol
which should parse lines that look like this:
BETA 6 11 5 24 -1 oiiio
So I can end up calling the BetaPair constructor, which will need these values (some like Int, some like other types like [Exposure] and Parallel)
( , , , , - . !)