Est-il possible de déduire le type de many1
?Parsec: type intuit à partir de la chaîne analysée
MWE
module Main where
import System.Environment (getArgs)
import Text.ParserCombinators.Parsec
import Data.Either (rights)
type Vertex vertexWeight = (String, vertexWeight)
parseVertex :: Parser (Vertex a)
parseVertex = do
name <- many1 (noneOf "/")
char '/'
weight <- many1 (noneOf "\n")
return $ (name, weight)
main :: IO()
main = do
putStrLn $ rights $ [parse parseVertex "test" "a/2"]
Dans l'exemple ci-dessus, je voudrais que le paramètre weight
pour obtenir comme Int sorti, mais cela ne tape-chèque non.
Serait-il plus sage de représenter un sommet comme (String, String)
et de définir des analyseurs pour le poids?
'many1 (noneOf" \ n ") :: Chaîne d'analyseur'. Vous pouvez convertir cela en un Int de plusieurs façons - par exemple 'read <$> many1 (noneOf" \ n ") :: Parser Int' - mais notez que la chaîne analysée par' many1 (noneOf "\ n") 'pourrait ne pas être un nombre du tout. Il existe un [package] (https://hackage.haskell.org/package/parsec-numbers-0.1.0/docs/Text-ParserCombinators-Parsec-Number.html) qui fournit des analyseurs numériques pour Parsec, mais si vous le souhaitez pour rouler le vôtre, vous devrez faire quelque chose comme 'lire <$> many1 (oneOf ['0' .. '9']) :: Parser Int'. – user2407038