| Copyright | (C) Koz Ross 2020 |
|---|---|
| License | GPL version 3.0 or later |
| Maintainer | koz.ross@retro-freedom.nz |
| Stability | Experimental |
| Portability | GHC only |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Data.Finitary.Optics
Description
Synopsis
- reindexed :: (Finitary a, Finitary b, Cardinality a ~ Cardinality b) => Iso' a b
- tighter :: (Finitary a, Finitary b, Cardinality b <= Cardinality a) => Prism' a b
Documentation
reindexed :: (Finitary a, Finitary b, Cardinality a ~ Cardinality b) => Iso' a b Source #
Types with identical cardinalities can be freely interconverted by way of their indexes.
This is actually stronger than most Isos, as it also ensures that order is
preserved; namely, if x < y, then view reindexed x < view reindexed y.
tighter :: (Finitary a, Finitary b, Cardinality b <= Cardinality a) => Prism' a b Source #
We can use indexes to convert a 'larger' type to a smaller one, and (possibly) vice-versa.
This is actually stronger than most Prisms, as it also ensures that order
is preserved in both directions. Specifically, if x < y, then:
review tighter x < review tighter y; and- If
preview tighter x == Just x'andpreview tighter y == Just y', thenx' < y'.