language-haskell
Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Extensions.Grammar

Description

The grammar(s) of Haskell with syntactic extensions.

The following extensions are not implemented, mainly due to not being supported by TemplateHaskell:

Synopsis

Documentation

data ExtendedGrammar l t (f :: Type -> Type) (p :: Type -> Type) Source #

Contains the refactored Haskell2010 HaskellGrammar with additional fields for language extensions

Instances

Instances details
(Applicative (HaskellGrammar l t f), Applicative (GrammarExtensions l t f)) => Applicative (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

pure :: (forall a. f0 a) -> ExtendedGrammar l t f f0 #

(Apply (HaskellGrammar l t f), Apply (GrammarExtensions l t f)) => Apply (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

(<*>) :: forall (p :: Type -> Type) (q :: Type -> Type). ExtendedGrammar l t f (p ~> q) -> ExtendedGrammar l t f p -> ExtendedGrammar l t f q #

liftA2 :: (forall a. p a -> q a -> r a) -> ExtendedGrammar l t f p -> ExtendedGrammar l t f q -> ExtendedGrammar l t f r #

liftA3 :: (forall a. p a -> q a -> r a -> s a) -> ExtendedGrammar l t f p -> ExtendedGrammar l t f q -> ExtendedGrammar l t f r -> ExtendedGrammar l t f s #

(Distributive (HaskellGrammar l t f), Distributive (GrammarExtensions l t f)) => Distributive (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

collect :: forall p a (q :: Type -> Type). Functor p => (a -> ExtendedGrammar l t f q) -> p a -> ExtendedGrammar l t f (Compose p q) #

distribute :: forall p (q :: Type -> Type). Functor p => p (ExtendedGrammar l t f q) -> ExtendedGrammar l t f (Compose p q) #

cotraverse :: Functor m => (forall a. m (p a) -> q a) -> m (ExtendedGrammar l t f p) -> ExtendedGrammar l t f q #

(DistributiveTraversable (HaskellGrammar l t f), DistributiveTraversable (GrammarExtensions l t f)) => DistributiveTraversable (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

collectTraversable :: forall f1 a (f2 :: Type -> Type). Traversable f1 => (a -> ExtendedGrammar l t f f2) -> f1 a -> ExtendedGrammar l t f (Compose f1 f2) #

distributeTraversable :: forall f1 (f2 :: Type -> Type). Traversable f1 => f1 (ExtendedGrammar l t f f2) -> ExtendedGrammar l t f (Compose f1 f2) #

cotraverseTraversable :: Traversable f1 => (forall x. f1 (f2 x) -> f0 x) -> f1 (ExtendedGrammar l t f f2) -> ExtendedGrammar l t f f0 #

(Foldable (HaskellGrammar l t f), Foldable (GrammarExtensions l t f)) => Foldable (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

foldMap :: Monoid m => (forall a. p a -> m) -> ExtendedGrammar l t f p -> m #

(Functor (HaskellGrammar l t f), Functor (GrammarExtensions l t f)) => Functor (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

(<$>) :: (forall a. p a -> q a) -> ExtendedGrammar l t f p -> ExtendedGrammar l t f q #

(Logistic (HaskellGrammar l t f), Logistic (GrammarExtensions l t f)) => Logistic (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

deliver :: forall p (q :: Type -> Type). Contravariant p => p (ExtendedGrammar l t f q -> ExtendedGrammar l t f q) -> ExtendedGrammar l t f (Compose p (q ~> q)) #

(Traversable (HaskellGrammar l t f), Traversable (GrammarExtensions l t f)) => Traversable (ExtendedGrammar l t f :: (Type -> Type) -> Type) Source # 
Instance details

Defined in Language.Haskell.Extensions.Grammar

Methods

traverse :: Applicative m => (forall a. p a -> m (q a)) -> ExtendedGrammar l t f p -> m (ExtendedGrammar l t f q) #

sequence :: forall m (p :: Type -> Type). Applicative m => ExtendedGrammar l t f (Compose m p) -> m (ExtendedGrammar l t f p) #

extendedGrammar :: (ExtendedHaskell l, LexicalParsing (Parser (ExtendedGrammar l t (NodeWrap t)) t), Ord t, Show t, OutlineMonoid t, SpaceMonoid t, DeeplyFoldable (Serialization (Down Int) t) l) => Set Extension -> Grammar (ExtendedGrammar l t (NodeWrap t)) (ParserT ((,) [[Lexeme t]])) t Source #

Construct the Haskell grammar corresponding to the given set of language extensions

parseModule :: (ExtendedHaskell l, LexicalParsing (Parser (ExtendedGrammar l t (NodeWrap t)) t), Ord t, Show t, OutlineMonoid t, SpaceMonoid t, DeeplyFoldable (Serialization (Down Int) t) l) => Map Extension Bool -> t -> ParseResults t [NodeWrap t (Module l l (NodeWrap t) (NodeWrap t))] Source #

Parse a Haskell module using the grammar corresponding to the given set of language extensions and the extensions specified by the module's LANGUAGE pragmas.

type NodeWrap s = Wrapped (Down Int) s Source #

The wrap of every parsed AST node keeps track of the parsed input range and the lexemes consumed from it.