remote-monad: An parametrizable Remote Monad, and parametrizable Applicative Functor

[ bsd3, control, library ] [ Propose Tags ]

An implementation of the concepts behind Remote Monads. There is support for various bundling strategies.

{-# LANGUAGE KindSignatures #-}

module Main where

import Control.Remote.Monad
import Control.Remote.Monad.Packet.Weak

data Command :: * where
  Say :: String -> Command

data Procedure :: * -> * where
  Temperature :: Procedure Int

say :: String -> RemoteMonad Command Procedure ()
say s = command (Say s)

temperature :: RemoteMonad Command Procedure Int
temperature = procedure Temperature

runWP :: WeakPacket Command Procedure a -> IO a
runWP (Command (Say s))  = print s
runWP (Procedure Temperature) = return 42

send :: RemoteMonad Command Procedure a -> IO a
send m = runMonad runWP m

main = send $ do
  say "Howdy doodly do"
  say "How about a muffin?"
  t <- temperature
  say (show t ++ "F")
Versions [faq],, 0.2 (info)
Dependencies base (>=4.8 && <5), natural-transformation (==0.3.*), transformers (>=0.4 && <0.6) [details]
License BSD-3-Clause
Copyright (c) 2016 The University of Kansas
Author Andy Gill, Justin Dawson
Revised Revision 1 made by AndyGill at Thu Feb 11 15:08:40 UTC 2016
Category Control
Source repo head: git clone git://
Uploaded by AndyGill at Thu Jan 28 21:33:17 UTC 2016
Distributions NixOS:0.2
Downloads 1575 total (29 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2016-11-28 [all 2 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