simbolos opciones mundo imprimir hola hacer funciones ejemplos como basico file haskell io parsec

file - opciones - imprimir en haskell



Cómo analizar un Tuple(String, Int) en Haskell usando parsec (1)

Creo que ya logré analizar cadenas para cadenas y cadenas a Ints, pero también necesito analizar un tipo (String, Int) como userRatings para poder leer correctamente un archivo de texto y estoy usando Parsec

Este es el análisis junto con la importación

import Text.Parsec ( Parsec, ParseError, parse -- Types and parser , between, noneOf, sepBy, many1 -- Combinators , char, spaces, digit, newline -- Simple parsers ) -- Parse a string to a string stringLit :: Parsec String u String stringLit = between (char ''"'') (char ''"'') $ many1 $ noneOf "/"/n" -- Parse a string to a list of strings listOfStrings :: Parsec String u [String] listOfStrings = stringLit `sepBy` (char '','' >> spaces) -- Parse a string to an int intLit :: Parsec String u Int intLit = fmap read $ many1 digit -- Or `read <$> many1 digit` with Control.Applicative film :: Parsec String u Film film = do -- alternatively `title <- stringLit <* newline` with Control.Applicative title <- stringLit newline director <- stringLit newline year <- intLit newline userRatings <- listOfStrings newline return (title, director, year, userRatings)


Puede hacerlo componiendo a partir de analizadores existentes utilizando la interfaz Applicative o Monad . Parser tiene instancias de ambos.

Usando Applicative :

stringIntTuple :: Parser (String, Int) stringIntTuple = (,) <$> yourStringParser <*> yourIntParser

Que es lo mismo que el siguiente:

stringIntTuple :: Parser (String, Int) stringIntTuple = liftA2 (,) yourStringParser yourIntParser

Usando Monad :

stringIntTuple :: Parser (String, Int) stringIntTuple = do theString <- yourStringParser theInt <- yourIntParser return (theString, theInt)