{- | Module : $Header$ Description : Interface for reading and manipulating Curry source code Copyright : (c) 2009 Holger Siegel 2011 - 2013 Björn Peemöller 2016 Finn Teegen 2016 Jan Tikovsky License : BSD-3-clause Maintainer : bjp@informatik.uni-kiel.de Stability : experimental Portability : portable -} module Curry.Syntax ( module Curry.Syntax.Type , module Curry.Syntax.Utils , L.Token (..), L.Category (..), L.Attributes (..) , unlit, unlitLexSource, unlitParseHeader, unlitParsePragmas, unlitParseModule , lexSource, parseInterface, parseHeader, parsePragmas, parseModule, parseGoal , ppModule, ppInterface, ppIDecl , showModule ) where import Curry.Base.Monad (CYM) import Curry.Base.Span (Span) import qualified Curry.Files.Unlit as U (unlit) import qualified Curry.Syntax.Lexer as L import qualified Curry.Syntax.Parser as P import Curry.Syntax.Pretty (ppModule, ppInterface, ppIDecl) import Curry.Syntax.ShowModule (showModule) import Curry.Syntax.Type import Curry.Syntax.Utils -- |Unliterate a LiterateCurry file, identity on normal Curry file. unlit :: FilePath -> String -> CYM String unlit = U.unlit -- |Unliterate and return the result of a lexical analysis of the source -- program @src@. -- The result is a list of tuples consisting of a 'Span' and a 'Token'. unlitLexSource :: FilePath -> String -> CYM [(Span, L.Token)] unlitLexSource fn src = U.unlit fn src >>= L.lexSource fn -- |Unliterate and parse only pragmas of a Curry 'Module' unlitParsePragmas :: FilePath -> String -> CYM (Module ()) unlitParsePragmas fn src = U.unlit fn src >>= P.parsePragmas fn -- |Unliterate and parse a Curry 'Module' header unlitParseHeader :: FilePath -> String -> CYM (Module ()) unlitParseHeader fn src = U.unlit fn src >>= P.parseHeader fn -- |Unliterate and parse a Curry 'Module' unlitParseModule :: FilePath -> String -> CYM (Module ()) unlitParseModule fn src = U.unlit fn src >>= P.parseSource fn -- |Return the result of a lexical analysis of the source program @src@. -- The result is a list of tuples consisting of a 'Span' and a 'Token'. lexSource :: FilePath -> String -> CYM [(Span, L.Token)] lexSource = L.lexSource -- |Parse a Curry 'Interface' parseInterface :: FilePath -> String -> CYM Interface parseInterface = P.parseInterface -- |Parse only pragmas of a Curry 'Module' parsePragmas :: FilePath -> String -> CYM (Module ()) parsePragmas = P.parsePragmas -- |Parse a Curry 'Module' header parseHeader :: FilePath -> String -> CYM (Module ()) parseHeader = P.parseHeader -- |Parse a Curry 'Module' parseModule :: FilePath -> String -> CYM (Module ()) parseModule = P.parseSource -- |Parse a 'Goal', i.e. an expression with (optional) local declarations parseGoal :: String -> CYM (Goal ()) parseGoal = P.parseGoal