shade: A control structure used to combine heterogenous types with delayed effects.
{-# LANGUAGE MultiParamTypeClasses #-} module Main ( main ) where import Data.Functor.Identity import Control.Monad import Control.Monad.Shade
A shade can be used to save heterogeneous types in containers with the same
type e.g. using a type-class as a common denominator:
> showshade :: Applicative m => Show a => a -> Shade m String
> showshade a = pure (show a)
>
> hetero :: Shade Identity String
> hetero = mconcat [ showshade () , showshade 2 , showshade "hej" ]
The values inside a shade are stored in a context. We can swap this context
by defining a transfer function:
> idToIO :: Identity b -> IO b
> idToIO (Identity v) = putStrLn Transferring *> pure v
The context is switched using transfer
and we can access the value in this
new context by using shadow
:
> runInIO :: Shade Identity a -> IO a
> runInIO = shadow . transfer idToIO
The point to note about this example is that the values are stored in an
shades with the identity as context. We can manipulate this context
including the value. We cannot, however inspect the value since it is
universally quantified.
[Skip to Readme]
Downloads
- shade-0.1.0.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.1.0, 0.1.1.1 |
---|---|
Dependencies | base (>=4.9 && <5), shade [details] |
License | BSD-3-Clause |
Copyright | Copyright: (c) 2017 Frederik Hanghøj Iversen |
Author | Frederik Hanghøj Iversen |
Maintainer | fhi.1990@gmail.com |
Revised | Revision 1 made by HerbertValerioRiedel at 2017-05-19T21:07:16Z |
Category | Web |
Home page | https://github.com/fredefox/shade#readme |
Source repo | head: git clone https://github.com/fredefox/shade |
Uploaded | by fredefox at 2017-05-19T20:22:01Z |
Distributions | |
Reverse Dependencies | 1 direct, 0 indirect [details] |
Executables | shade |
Downloads | 5253 total (0 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs available [build log] Last success reported on 2017-05-19 [all 1 reports] |