J'ai ce qui suit, qui vérifie de type-:Comment puis-je obtenir Parsec pour me laisser appeler `read` :: Int?
p_int = liftA read (many (char ' ') *> many1 digit <* many (char ' '))
Maintenant, comme le nom de la fonction implique, je le veux me donner un Int. Mais si je fais ceci:
p_int = liftA read (many (char ' ') *> many1 digit <* many (char ' ')) :: Int
Je reçois cette erreur de 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
est-il un plus simple, plus propre moyen d'utiliser des entiers qui peuvent avoir des espaces? Ou un moyen de résoudre ce problème?
En fin de compte, je veux que cela fasse partie des éléments suivants:
betaLine = string "BETA " *> p_int <*> p_int <*> p_int <*>
p_int <*> p_parallel <*> p_exposure <* eol
qui est d'analyser les lignes qui ressemblent à ceci:
BETA 6 11 5 24 -1 oiiio
Je peux donc éventuellement appeler un constructeur BetaPair qui sera besoin de ces valeurs (certaines comme Int, d'autres comme d'autres types comme [Exposure] et Parallel)
(si vous êtes curieux, ceci est un analyseur pour un format de fichier qui représente, entre autres, choses, des paires de brins bêta liés à l'hydrogène dans les protéines. Je n'ai aucun contrôle sur le format de fichier!)
parfait, merci! taper la fonction de lecture est exactement ce dont j'avais besoin; Je ne faisais que fausser la syntaxe. –