language-haskell
Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Extensions.Reformulator

Description

The module exports functions that reformulate an AST in terms of the language extensions it uses.

Synopsis

Documentation

data ReformulationOf (e :: ExtensionSwitch) (es :: [ExtensionSwitch]) λ l pos s Source #

Transformation to reformulate code from language λ using extension e to language l using extensions es

Instances

Instances details
(QualifiedName λ ~ QualifiedName λ, ModuleName λ ~ ModuleName λ, Name λ ~ Name λ, QualifiedName l ~ QualifiedName l, ModuleName l ~ ModuleName l, Name l ~ Name l) => NameTranslation (ReformulationOf e es λ l pos s) Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

Associated Types

type Origin (ReformulationOf e es λ l pos s) 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Origin (ReformulationOf e es λ l pos s) = λ
type Target (ReformulationOf e es λ l pos s) 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Target (ReformulationOf e es λ l pos s) = l

Methods

translateName :: ReformulationOf e es λ l pos s -> Name (Origin (ReformulationOf e es λ l pos s)) -> Name (Target (ReformulationOf e es λ l pos s)) Source #

translateModuleName :: ReformulationOf e es λ l pos s -> ModuleName (Origin (ReformulationOf e es λ l pos s)) -> ModuleName (Target (ReformulationOf e es λ l pos s)) Source #

translateQualifiedName :: ReformulationOf e es λ l pos s -> QualifiedName (Origin (ReformulationOf e es λ l pos s)) -> QualifiedName (Target (ReformulationOf e es λ l pos s)) Source #

(QualifiedName λ ~ QualifiedName λ, ModuleName λ ~ ModuleName λ, Name λ ~ Name λ, QualifiedName l ~ QualifiedName l, ModuleName l ~ ModuleName l, Name l ~ Name l) => WrapTranslation (ReformulationOf e es λ l pos s) Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

Associated Types

type Wrap (ReformulationOf e es λ l pos s) 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Wrap (ReformulationOf e es λ l pos s) = Wrap λ pos s
(TextualMonoid s, DeeplyFoldable (Accounting l1 pos s) l1, QualifiedName l1 ~ QualifiedName l1, QualifiedName l2 ~ QualifiedName l2, ModuleName l1 ~ ModuleName l1, ModuleName l2 ~ ModuleName l2, Name l1 ~ Name l1, Name l2 ~ Name l2, Module l1 ~ Module l1, Module l2 ~ Module l2) => Translation (ReformulationOf e es l1 l2 pos s) Module Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

Methods

translate :: ReformulationOf e es l1 l2 pos s -> Module (Origin (ReformulationOf e es l1 l2 pos s)) (Origin (ReformulationOf e es l1 l2 pos s)) (Wrap (ReformulationOf e es l1 l2 pos s)) (Wrap (ReformulationOf e es l1 l2 pos s)) -> Module (Target (ReformulationOf e es l1 l2 pos s)) (Origin (ReformulationOf e es l1 l2 pos s)) (Wrap (ReformulationOf e es l1 l2 pos s)) (Wrap (ReformulationOf e es l1 l2 pos s)) Source #

(SameWrap 'NPlusKPatterns '['ViewPatterns] pos s λ l2, Haskell l2, Supports 'NPlusKPatterns λ, Supports 'ViewPatterns l2, FieldPattern l2 ~ FieldPattern l2, QualifiedName l2 ~ QualifiedName l2, ModuleName l2 ~ ModuleName l2, Name l2 ~ Name l2) => WrappedTranslation (ReformulationOf (On 'NPlusKPatterns) '[On 'ViewPatterns] λ l2 pos s) Pattern Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

(SameWrap 'RecordWildCards '['NamedFieldPuns] pos s λ l, Supports 'RecordWildCards λ, Haskell l, FieldBinding l ~ FieldBinding l, QualifiedName l ~ QualifiedName l, ModuleName l ~ ModuleName l, Name l ~ Name l) => WrappedTranslation (ReformulationOf (On 'RecordWildCards) '[On 'NamedFieldPuns] λ l pos s) Expression Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

(SameWrap 'RecordWildCards '['NamedFieldPuns] pos s λ l2, Supports 'RecordWildCards λ, FieldPattern l2 ~ FieldPattern l2, QualifiedName l2 ~ QualifiedName l2, ModuleName l2 ~ ModuleName l2, Name l2 ~ Name l2) => WrappedTranslation (ReformulationOf (On 'RecordWildCards) '[On 'NamedFieldPuns] λ l2 pos s) Pattern Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Origin (ReformulationOf e es λ l pos s) Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Origin (ReformulationOf e es λ l pos s) = λ
type Target (ReformulationOf e es λ l pos s) Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Target (ReformulationOf e es λ l pos s) = l
type Wrap (ReformulationOf e es λ l pos s) Source # 
Instance details

Defined in Language.Haskell.Extensions.Reformulator

type Wrap (ReformulationOf e es λ l pos s) = Wrap λ pos s

type Wrap l pos s = WithEnvironment l (Wrapped pos s) Source #

The same node wrap is used by both the original and target language.

dropRecordWildCards :: forall l1 l2 node pos s. (Haskell l2, ExtendedWith '['NamedFieldPuns] l2, SameWrap 'RecordWildCards '['NamedFieldPuns] pos s l1 l2, FullyTranslatable (ReformulationOf (On 'RecordWildCards) '[On 'NamedFieldPuns] l1 l2 pos s) node) => Wrap l1 pos s (node l1 l1 (Wrap l1 pos s) (Wrap l1 pos s)) -> Wrap l1 pos s (node l2 l2 (Wrap l1 pos s) (Wrap l1 pos s)) Source #

Eliminate the RecordWildCards extension and replace it with NamedFieldPuns.

dropNPlusKPatterns :: forall l1 l2 node pos s. (Haskell l2, ExtendedWith '['ViewPatterns] l2, SameWrap 'NPlusKPatterns '['ViewPatterns] pos s l1 l2, FullyTranslatable (ReformulationOf (On 'NPlusKPatterns) '[On 'ViewPatterns] l1 l2 pos s) node) => Wrap l1 pos s (node l1 l1 (Wrap l1 pos s) (Wrap l1 pos s)) -> Wrap l1 pos s (node l2 l2 (Wrap l1 pos s) (Wrap l1 pos s)) Source #

Eliminate the NPlusKPatterns extension and replace it with ViewPatterns.

dropNoListTuplePuns :: forall l1 l2 node pos s. (Haskell l2, FullyTranslatable (ReformulationOf (Off 'ListTuplePuns) ('[] :: [ExtensionSwitch]) l1 l2 pos s) node) => Wrap l1 pos s (node l1 l1 (Wrap l1 pos s) (Wrap l1 pos s)) -> Wrap l1 pos s (node l2 l2 (Wrap l1 pos s) (Wrap l1 pos s)) Source #

Eliminate the NoListTuplePuns extension.