
Control.Arrow.DeepArrow.Examples  Portability  portable  Stability  experimental  Maintainer  conal@conal.net 





Description 
DeepArrow examples.
The types in the source code are formatted for easier reading.


Synopsis 

deep :: DeepArrow ~> => (c ~> c') > (a > (f, b > (c, g)), e) ~> (a > (f, b > (c', g)), e)   extF :: DeepArrow ~> => (d ~> (c > b)) > (e > (a, d), f) ~> (c > (e > (a, b), f))   extFF :: DeepArrow ~> => (e > (a, c > b), f) ~> (c > (e > (a, b), f))   extI :: DeepArrow ~> => (((a, (b, e)), c) > d) ~> (b > ((a, e), c) > d)   extFI :: DeepArrow ~> => (e > (g, ((a, (b, e)), c) > d), f) ~> (b > (e > (g, ((a, e), c) > d), f)) 



Deep application


deep :: DeepArrow ~> => (c ~> c') > (a > (f, b > (c, g)), e) ~> (a > (f, b > (c', g)), e)  Source 

Given a value of type (a > (f,b > (c,g)),e), apply a function to
just the c part and leave the rest intact.
deep = first . result . second . result . first 

Function extraction


extF :: DeepArrow ~> => (d ~> (c > b)) > (e > (a, d), f) ~> (c > (e > (a, b), f))  Source 

Given a way to extract a function from a d value, create a way to
extract a function from a (e > (a,d), f) value.
extF = funFirst . funResult . funSecond 

extFF :: DeepArrow ~> => (e > (a, c > b), f) ~> (c > (e > (a, b), f))  Source 

To make an extractor, simply apply the extractortransformer extF
to the identity arrow.
extFF = extF idA 

Input extraction


extI :: DeepArrow ~> => (((a, (b, e)), c) > d) ~> (b > ((a, e), c) > d)  Source 

Extract a b input from a ((a,(b,e)),c) argument.
extI = (inpFirst . inpSecond) inpF 

extFI :: DeepArrow ~> => (e > (g, ((a, (b, e)), c) > d), f) ~> (b > (e > (g, ((a, e), c) > d), f))  Source 

Typically, we will have to combine function and input extractors.
For instance, combine extF and extI.
extFI = extF extI 

Produced by Haddock version 2.3.0 