| 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 # | |