operational 0.2.1.2 → 0.2.1.3
raw patch · 3 files changed
+5/−3 lines, 3 filesdep ~mtl
Dependency ranges changed: mtl
Files
- doc/examples/PoorMansConcurrency.hs +1/−0
- operational.cabal +2/−2
- src/Control/Monad/Operational.hs +2/−1
doc/examples/PoorMansConcurrency.hs view
@@ -41,6 +41,7 @@ runProcess :: Monad m => Process m a -> m () runProcess m = schedule [m] where+ schedule :: Monad m => [Process m a] -> m () schedule (x:xs) = run (view x) xs run :: Monad m => ProgramView (ProcessI m) a -> [Process m a] -> m ()
operational.cabal view
@@ -1,5 +1,5 @@ Name: operational-Version: 0.2.1.2+Version: 0.2.1.3 Synopsis: Implementation of difficult monads made easy with operational semantics. Description:@@ -35,7 +35,7 @@ Library hs-source-dirs: src- build-depends: base == 4.* , mtl >= 1.1 && < 2.1.0+ build-depends: base == 4.* , mtl >= 1.1 && < 2.2.0 ghc-options: -Wall extensions: GADTs, UndecidableInstances, MultiParamTypeClasses, FlexibleInstances
src/Control/Monad/Operational.hs view
@@ -96,7 +96,8 @@ or you can keep a log of all user inputs on the client side an replay them, and so on. Moreover, you can implement different @run@ functions for one and the same custom monad, which is useful for testing.-Also not that the result of the @run@ function does not need to be a monad at all.+Also note that the result type of the @run@ function does not need to+be a monad at all. In essence, your custom monad allows you to express your web application as a simple imperative program,