shade: A control structure used to combine heterogenous types with delayed effects.

[ bsd3, control, library ] [ Propose Tags ]
{-# 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]
Versions [faq],,,,,,
Dependencies base (>=4.9 && <5), shade [details]
License BSD-3-Clause
Copyright Copyright: (c) 2017 Frederik Hanghøj Iversen
Author Frederik Hanghøj Iversen
Revised Revision 1 made by HerbertValerioRiedel at 2017-05-19T21:07:16Z
Category Web
Home page
Source repo head: git clone
Uploaded by fredefox at 2017-05-19T20:22:01Z
Distributions NixOS:
Executables shade
Downloads 4473 total (4 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2017-05-19 [all 1 reports]




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

Readme for shade-

[back to package description]