A data structure to reify combinatorial species.
- data SpeciesAlgT s where
- O :: SpeciesAlgT Z
- I :: SpeciesAlgT (S Z)
- X :: SpeciesAlgT X
- :+: :: (ShowF (StructureF f), ShowF (StructureF g)) => SpeciesAlgT f -> SpeciesAlgT g -> SpeciesAlgT (f :+: g)
- :*: :: (ShowF (StructureF f), ShowF (StructureF g)) => SpeciesAlgT f -> SpeciesAlgT g -> SpeciesAlgT (f :*: g)
- :.: :: (ShowF (StructureF f), ShowF (StructureF g)) => SpeciesAlgT f -> SpeciesAlgT g -> SpeciesAlgT (f :.: g)
- Der :: ShowF (StructureF f) => SpeciesAlgT f -> SpeciesAlgT (Der f)
- E :: SpeciesAlgT E
- C :: SpeciesAlgT C
- OfSize :: SpeciesAlgT f -> (Integer -> Bool) -> SpeciesAlgT f
- OfSizeExactly :: SpeciesAlgT f -> Integer -> SpeciesAlgT f
- data SpeciesAlg where
- SA :: ShowF (StructureF s) => SpeciesAlgT s -> SpeciesAlg
- needsZT :: SpeciesAlgT s -> Bool
- needsZ :: SpeciesAlg -> Bool
- reify :: SpeciesAlg -> SpeciesAlg
- reflectT :: Species s => SpeciesAlgT f -> s
- reflect :: Species s => SpeciesAlg -> s
Documentation
data SpeciesAlgT s whereSource
Reified combinatorial species. Note that SpeciesAlgT
has a
phantom type parameter which also reflects the structure, so we
can do case analysis on species at both the value and type level.
Of course, the non-uniform type parameter means that
SpeciesAlgT
cannot be an instance of the Species
class; for
that purpose the existential wrapper SpeciesAlg
is provided.
O :: SpeciesAlgT Z | |
I :: SpeciesAlgT (S Z) | |
X :: SpeciesAlgT X | |
:+: :: (ShowF (StructureF f), ShowF (StructureF g)) => SpeciesAlgT f -> SpeciesAlgT g -> SpeciesAlgT (f :+: g) | |
:*: :: (ShowF (StructureF f), ShowF (StructureF g)) => SpeciesAlgT f -> SpeciesAlgT g -> SpeciesAlgT (f :*: g) | |
:.: :: (ShowF (StructureF f), ShowF (StructureF g)) => SpeciesAlgT f -> SpeciesAlgT g -> SpeciesAlgT (f :.: g) | |
Der :: ShowF (StructureF f) => SpeciesAlgT f -> SpeciesAlgT (Der f) | |
E :: SpeciesAlgT E | |
C :: SpeciesAlgT C | |
OfSize :: SpeciesAlgT f -> (Integer -> Bool) -> SpeciesAlgT f | |
OfSizeExactly :: SpeciesAlgT f -> Integer -> SpeciesAlgT f |
Show (SpeciesAlgT s) |
data SpeciesAlg whereSource
An existential wrapper to hide the phantom type parameter to
SpeciesAlgT
, so we can make it an instance of Species
.
SA :: ShowF (StructureF s) => SpeciesAlgT s -> SpeciesAlg |
needsZT :: SpeciesAlgT s -> BoolSource
needsZT
is a predicate which checks whether a species uses any
of the operations which are not supported directly by ordinary
generating functions (composition and differentiation), and hence
need cycle index series.
needsZ :: SpeciesAlg -> BoolSource
A version of needsZT
for SpeciesAlg
.
reify :: SpeciesAlg -> SpeciesAlgSource
Reify a species expression into a tree. Of course, this is just the identity function with a usefully restricted type. For example:
> reify octopus (C . C'_+)
reflectT :: Species s => SpeciesAlgT f -> sSource
Reflect a species back into any instance of the Species
class.
reflect :: Species s => SpeciesAlg -> sSource
A version of reflectT
for the existential wrapper SpeciesAlg
.