    {-# LANGUAGE Safe #-}

    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Text.Parsec.String
    -- Copyright   :  (c) Antoine Latter 2011
    -- License     :  BSD-style (see the file libraries/parsec/LICENSE)
    --
    -- Maintainer  :  aslatter@gmail.com
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -- Convenience definitions for working with lazy 'Text.Text'.
    --
    -----------------------------------------------------------------------------

    module Text.Parsec.Text.Lazy
        ( Parser, GenParser, parseFromFile
        ) where

    import qualified Data.Text.Lazy as Text
    import qualified Data.Text.Lazy.IO as TL

    import Text.Parsec.Prim
    import Text.Parsec.Error

    type Parser = Parsec Text.Text ()
    type GenParser st = Parsec Text.Text st

    -- | @parseFromFile p filePath@ runs a strict text parser @p@ on the
    -- input read from @filePath@ using 'Data.Text.Lazy.IO.readFile'. Returns either a 'ParseError'
    -- ('Left') or a value of type @a@ ('Right').
    --
    -- >  main    = do{ result <- parseFromFile numbers "digits.txt"
    -- >              ; case result of
    -- >                  Left err  -> print err
    -- >                  Right xs  -> print (sum xs)
    -- >              }
    --
    -- @since 3.1.14.0

    parseFromFile :: Parser a -> FilePath -> IO (Either ParseError a)
    parseFromFile :: forall a. Parser a -> FilePath -> IO (Either ParseError a)
    parseFromFile Parser a
    p FilePath
    fname
        = do Text
    input <- FilePath -> IO Text
    TL.readFile FilePath
    fname
             Either ParseError a -> IO (Either ParseError a)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Parser a -> () -> FilePath -> Text -> Either ParseError a
    forall s t u a.
    Stream s Identity t =>
    Parsec s u a -> u -> FilePath -> s -> Either ParseError a
    runP Parser a
    p () FilePath
    fname Text
    input)