1 -----------------------------------------------------------------------------
3 -- Module : Text.Parsec.String
4 -- Copyright : (c) Paolo Martini 2007
5 -- License : BSD-style (see the file libraries/parsec/LICENSE)
7 -- Maintainer : derek.a.elkins@gmail.com
8 -- Stability : provisional
9 -- Portability : portable
11 -- Make Strings an instance of 'Stream' with 'Char' token type.
13 -----------------------------------------------------------------------------
15 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
16 {-# OPTIONS_GHC -fno-warn-orphans #-}
18 module Text.Parsec.String
19 ( Parser, GenParser, parseFromFile
22 import Text.Parsec.Error
23 import Text.Parsec.Prim
25 instance (Monad m) => Stream [tok] m tok where
26 uncons [] = return $ Nothing
27 uncons (t:ts) = return $ Just (t,ts)
29 type Parser = Parsec String ()
30 type GenParser tok st = Parsec [tok] st
32 -- | @parseFromFile p filePath@ runs a string parser @p@ on the
33 -- input read from @filePath@ using 'Prelude.readFile'. Returns either a 'ParseError'
34 -- ('Left') or a value of type @a@ ('Right').
36 -- > main = do{ result <- parseFromFile numbers "digits.txt"
38 -- > Left err -> print err
39 -- > Right xs -> print (sum xs)
41 parseFromFile :: Parser a -> String -> IO (Either ParseError a)
43 = do input <- readFile fname
44 return (runP p () fname input)