Safe Haskell | None |
---|---|
Language | Haskell98 |
Data.Generics.PlateTypeable
Description
Deprecated: Use Data.Generics.Uniplate.Typeable instead
DEPRECATED: Use Data.Generics.Uniplate.Typeable instead.
This module supplies a method for writing Biplate
instances more easily.
To take an example:
data Expr = Var Int | Neg Expr | Add Expr Expr instance Typeable Expr where ... instance (Typeable a, Uniplate a) => PlateAll Expr a where plateAll (Var x ) = plate Var |- x plateAll (Neg x ) = plate Neg |+ x plateAll (Add x y) = plate Add |+ x |+ y instance Uniplate Expr where uniplate = uniplateAll
Synopsis
- module Data.Generics.Biplate
- class PlateAll from to where
- plateAll :: from -> Type from to
- uniplateAll :: PlateAll a b => a -> (Str b, Str b -> a)
- plate :: from -> Type from to
- (|+) :: (Typeable item, Typeable to, PlateAll item to) => Type (item -> from) to -> item -> Type from to
- (|-) :: Type (item -> from) to -> item -> Type from to
Documentation
module Data.Generics.Biplate
The Class
class PlateAll from to where #
This class represents going from the container type to the target.
Instances
PlateAll Bool to # | |
Defined in Data.Generics.PlateTypeable | |
PlateAll Char to # | |
Defined in Data.Generics.PlateTypeable | |
PlateAll Double to # | |
Defined in Data.Generics.PlateTypeable | |
PlateAll Float to # | |
Defined in Data.Generics.PlateTypeable | |
PlateAll Int to # | |
Defined in Data.Generics.PlateTypeable | |
PlateAll Integer to # | |
Defined in Data.Generics.PlateTypeable | |
PlateAll () to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll from to, Typeable from, Typeable to, Uniplate to) => PlateAll [from] to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll from to, Typeable from, Typeable to, Uniplate to) => PlateAll (Maybe from) to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, Typeable to, Uniplate to) => PlateAll (Either a b) to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, Typeable to, Uniplate to) => PlateAll (a, b) to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, PlateAll c to, Typeable c, Typeable to, Uniplate to) => PlateAll (a, b, c) to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, PlateAll c to, Typeable c, PlateAll d to, Typeable d, Typeable to, Uniplate to) => PlateAll (a, b, c, d) to # | |
Defined in Data.Generics.PlateTypeable | |
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, PlateAll c to, Typeable c, PlateAll d to, Typeable d, PlateAll e to, Typeable e, Typeable to, Uniplate to) => PlateAll (a, b, c, d, e) to # | |
Defined in Data.Generics.PlateTypeable |
uniplateAll :: PlateAll a b => a -> (Str b, Str b -> a) #
The Combinators
plate :: from -> Type from to #
The main combinator used to start the chain.
The following rule can be used for optimisation:
plate Ctor |- x == plate (Ctor x)
(|+) :: (Typeable item, Typeable to, PlateAll item to) => Type (item -> from) to -> item -> Type from to #
the field to the right may contain the target.
(|-) :: Type (item -> from) to -> item -> Type from to #
The field to the right does not contain the target. This can be used as either an optimisation, or more commonly for excluding primitives such as Int.
Orphan instances
Uniplate Bool # | |
Methods uniplate :: UniplateType Bool # | |
Uniplate Char # | |
Methods uniplate :: UniplateType Char # | |
Uniplate Double # | |
Methods uniplate :: UniplateType Double # | |
Uniplate Float # | |
Methods uniplate :: UniplateType Float # | |
Uniplate Int # | |
Methods uniplate :: UniplateType Int # | |
Uniplate Integer # | |
Methods uniplate :: UniplateType Integer # | |
Uniplate () # | |
Methods uniplate :: UniplateType () # | |
(Typeable a, Typeable b, Uniplate b, PlateAll a b) => Biplate a b # | |
Methods biplate :: BiplateType a b # |