monad-skeleton: Monads of program skeleta

[ bsd3, control, library, monads ] [ Propose Tags ]

Fast operational monad library


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0, 0.1, 0.1.1, 0.1.2, 0.1.2.1, 0.1.2.2, 0.1.3, 0.1.3.1, 0.1.3.2, 0.1.4, 0.1.5, 0.2
Dependencies base (>=4 && <5) [details]
License BSD-3-Clause
Copyright Copyright (c) 2017 Fumiaki Kinoshita
Author Fumiaki Kinoshita
Maintainer Fumiaki Kinoshita <fumiexcel@gmail.com>
Category Control, Monads
Home page https://github.com/fumieval/monad-skeleton
Bug tracker http://github.com/fumieval/monad-skeleton/issues
Source repo head: git clone https://github.com/fumieval/monad-skeleton.git
Uploaded by FumiakiKinoshita at 2017-03-16T07:26:49Z
Distributions
Reverse Dependencies 6 direct, 17 indirect [details]
Downloads 9770 total (47 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-03-16 [all 1 reports]

Readme for monad-skeleton-0.1.3.2

[back to package description]

monad-skeleton

Build Status Hackage

This package provides Skeleton, an operational monad. The internal encoding gives O(1) bind and monadic reflection.

Skeleton promotes unit instructions to a monad. It is isomorphic to MonadView (Skeleton t):

data MonadView t m x where
  Return :: a -> MonadView t m a
  (:>>=) :: !(t a) -> (a -> m b) -> MonadView t m b

boned :: MonadView t (Skeleton t) a -> Skeleton t a
debone :: Skeleton t a -> MonadView t (Skeleton t) a

GADTs are handy to define instructions:

data Interaction x where
  Get :: Interacton String
  Put :: String -> Interaction ()

echo :: Skeleton Interaction ()
echo = bone Get >>= bone . Put

Use debone to interpret a computation.

interpret :: Skeleton Interaction a -> IO a
interpret m = case debone m of
  Return a -> return a
  Get :>>= k -> getLine >>= interpret . k
  Put s :>>= k -> putStrLn s >>= interpret . k