mirror of
https://github.com/lexi-lambda/freer-simple.git
synced 2024-12-23 14:12:45 +03:00
Rename project to freer-simple
This commit is contained in:
parent
8a5570174c
commit
e89ed8911f
113
.travis.yml
113
.travis.yml
@ -1,99 +1,46 @@
|
||||
# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
|
||||
language: c
|
||||
sudo: false
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cabsnap
|
||||
- $HOME/.cabal/packages
|
||||
|
||||
before_cache:
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
|
||||
- $HOME/.stack
|
||||
|
||||
# The different configurations we want to test.
|
||||
#
|
||||
# We set the compiler values here to tell Travis to use a different
|
||||
# cache file per set of arguments.
|
||||
matrix:
|
||||
include:
|
||||
- env: CABALVER=1.18 GHCVER=7.8.4 HAPPYVER=1.19.3 DO_CHECKS=0
|
||||
compiler: ": #GHC 7.8.4"
|
||||
addons: {apt: {packages: [cabal-install-1.18, ghc-7.8.4, happy-1.19.3], sources: [hvr-ghc]}}
|
||||
- env: CABALVER=1.22 GHCVER=7.10.3 HAPPYVER=1.19.4 DO_CHECKS=0
|
||||
compiler: ": #GHC 7.10.3"
|
||||
addons: {apt: {packages: [cabal-install-1.22, ghc-7.10.3, happy-1.19.4], sources: [hvr-ghc]}}
|
||||
- env: CABALVER=1.24 GHCVER=8.0.1 HAPPYVER=1.19.5 DO_CHECKS=1
|
||||
compiler: ": #GHC 8.0.1"
|
||||
addons: {apt: {packages: [cabal-install-1.24, ghc-8.0.1, happy-1.19.5], sources: [hvr-ghc]}}
|
||||
- env: CABALVER=1.24 GHCVER=8.0.2 HAPPYVER=1.19.5 DO_CHECKS=1
|
||||
compiler: ": #GHC 8.0.2"
|
||||
addons: {apt: {packages: [cabal-install-1.24, ghc-8.0.2, happy-1.19.5], sources: [hvr-ghc]}}
|
||||
- env: CABALVER=head GHCVER=head HAPPYVER=1.19.5 DO_CHECKS=1
|
||||
compiler: ": #GHC head"
|
||||
addons: {apt: {packages: [cabal-install-head, ghc-head, happy-1.19.5], sources: [hvr-ghc]}}
|
||||
- env: ARGS="--resolver lts-7"
|
||||
compiler: ": #stack 8.0.1"
|
||||
addons: { apt: { packages: [libgmp-dev] } }
|
||||
|
||||
- env: ARGS="--resolver lts-8"
|
||||
compiler: ": #stack 8.0.2"
|
||||
addons: { apt: { packages: [libgmp-dev] } }
|
||||
|
||||
- env: ARGS="--resolver nightly-2017-07-31"
|
||||
compiler: ": #stack 8.2.1"
|
||||
addons: { apt: { packages: [libgmp-dev] } }
|
||||
|
||||
- env: ARGS="--resolver nightly"
|
||||
compiler: ": #stack nightly"
|
||||
addons: { apt: { packages: [libgmp-dev] } }
|
||||
|
||||
allow_failures:
|
||||
- env: CABALVER=head GHCVER=head HAPPYVER=1.19.5 DO_CHECKS=1
|
||||
# Nightly builds are allowed to fail
|
||||
- env: ARGS="--resolver nightly"
|
||||
|
||||
before_install:
|
||||
# Using compiler above sets CC to an invalid value, so unset it
|
||||
- unset CC
|
||||
- export PATH=/opt/happy/$HAPPYVER/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
|
||||
- CABALFLAGS=(--enable-tests --enable-benchmarks --flags="pedantic test-hlint")
|
||||
|
||||
# Download and unpack the stack executable
|
||||
- export PATH=$HOME/.local/bin:$PATH
|
||||
- mkdir -p ~/.local/bin
|
||||
- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
|
||||
|
||||
install:
|
||||
- cabal --version
|
||||
- echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
|
||||
- if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
|
||||
then
|
||||
zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
|
||||
$HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
|
||||
fi
|
||||
- travis_retry cabal update -v
|
||||
- sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config
|
||||
- cabal install --only-dependencies --dry -v "${CABALFLAGS[@]}" > installplan.txt
|
||||
- sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
|
||||
- stack --no-terminal --install-ghc $ARGS test --bench --only-dependencies
|
||||
|
||||
# check whether current requested install-plan matches cached package-db snapshot
|
||||
- if diff -u $HOME/.cabsnap/installplan.txt installplan.txt;
|
||||
then
|
||||
echo "cabal build-cache HIT";
|
||||
rm -rfv .ghc;
|
||||
cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
|
||||
cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
|
||||
else
|
||||
echo "cabal build-cache MISS";
|
||||
rm -rf $HOME/.cabsnap;
|
||||
mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
|
||||
cabal install --only-dependencies "${CABALFLAGS[@]}";
|
||||
fi
|
||||
|
||||
# snapshot package-db on cache miss
|
||||
- if [ ! -d $HOME/.cabsnap ];
|
||||
then
|
||||
echo "snapshotting package-db to build-cache";
|
||||
mkdir $HOME/.cabsnap;
|
||||
cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
|
||||
cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
|
||||
fi
|
||||
|
||||
# Here starts the actual work to be performed for the package under test;
|
||||
# any command which exits with a non-zero exit code causes the build to fail.
|
||||
script:
|
||||
- if [ -f configure.ac ]; then autoreconf -i; fi
|
||||
# Option -v2 provides useful information for debugging.
|
||||
- cabal configure -v2 "${CABALFLAGS[@]}"
|
||||
- cabal build # this builds all libraries and executables (including tests/benchmarks)
|
||||
- cabal test
|
||||
# Older Cabal versions do not handle "ghc-options: -Werror" in -fpedantic
|
||||
# correctly. Package consistency doesn't depend on GHC version, or at least
|
||||
# it shouldn't.
|
||||
- if [ "$DO_CHECKS" = '1' ];
|
||||
then
|
||||
cabal check;
|
||||
fi
|
||||
- cabal sdist # tests that a source-distribution can be generated
|
||||
|
||||
# Check that the resulting source distribution can be built & installed.
|
||||
# If there are no other `.tar.gz` files in `dist`, this can be even simpler:
|
||||
# `cabal install --force-reinstalls dist/*-*.tar.gz`
|
||||
- SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&
|
||||
(cd dist && cabal install --force-reinstalls "$SRC_TGZ")
|
||||
|
||||
# EOF
|
||||
- stack --no-terminal $ARGS test --bench --no-run-benchmarks --haddock --no-haddock-deps --ghc-options=-Werror
|
||||
|
133
README.md
133
README.md
@ -1,47 +1,32 @@
|
||||
# Freer Effects: Extensible Effects with Freer Monads
|
||||
|
||||
[![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)](http://www.haskell.org)
|
||||
[![BSD3 License](http://img.shields.io/badge/license-BSD3-brightgreen.svg)](https://tldrlegal.com/license/bsd-3-clause-license-%28revised%29)
|
||||
|
||||
[![Hackage](http://img.shields.io/hackage/v/freer-effects.svg)](https://hackage.haskell.org/package/freer-effects)
|
||||
[![Stackage LTS 8](http://stackage.org/package/freer-effects/badge/lts-8?label=lts-8)](http://stackage.org/nightly/package/freer-effects)
|
||||
[![Stackage Nightly](http://stackage.org/package/freer-effects/badge/nightly?label=stackage)](http://stackage.org/nightly/package/freer-effects)
|
||||
[![Hackage Dependencies](https://img.shields.io/hackage-deps/v/freer-effects.svg)](http://packdeps.haskellers.com/feed?needle=freer-effects)
|
||||
[![Build](https://travis-ci.org/IxpertaSolutions/freer-effects.svg?branch=master)](https://travis-ci.org/IxpertaSolutions/freer-effects)
|
||||
|
||||
# Freer: Extensible Effects with Freer Monads [![Build Status](https://travis-ci.org/lexi-lambda/freer-simple.svg?branch=master)](https://travis-ci.org/lexi-lambda/freer-simple)
|
||||
|
||||
# Description
|
||||
|
||||
Library `freer-effects` (actively maintained fork of
|
||||
[`freer`](http://hackage.haskell.org/package/freer)) is an implementation of
|
||||
effect system for Haskell, which is based on the work of Oleg Kiselyov et al.:
|
||||
The `freer-simple` library (a fork of [`freer-effects`](http://hackage.haskell.org/package/freer-effects)) is an implementation of an effect system for Haskell, which is based on the work of Oleg Kiselyov et al.:
|
||||
|
||||
* [Freer Monads, More Extensible Effects](http://okmij.org/ftp/Haskell/extensible/more.pdf)
|
||||
* [Reflection without Remorse](http://okmij.org/ftp/Haskell/zseq.pdf)
|
||||
* [Extensible Effects](http://okmij.org/ftp/Haskell/extensible/exteff.pdf)
|
||||
|
||||
Much of the implementation is a repackaging and cleaning up of the reference
|
||||
materials provided [here](http://okmij.org/ftp/Haskell/extensible/).
|
||||
- [Freer Monads, More Extensible Effects](http://okmij.org/ftp/Haskell/extensible/more.pdf)
|
||||
- [Reflection without Remorse](http://okmij.org/ftp/Haskell/zseq.pdf)
|
||||
- [Extensible Effects](http://okmij.org/ftp/Haskell/extensible/exteff.pdf)
|
||||
|
||||
Much of the implementation is a repackaging and cleaning up of the reference materials provided [here](http://okmij.org/ftp/Haskell/extensible/).
|
||||
|
||||
# Features
|
||||
|
||||
The key features of Freer are:
|
||||
|
||||
* An efficient effect system for Haskell as a library.
|
||||
* Implementations for several common Haskell monads as effects:
|
||||
* `Reader`
|
||||
* `Writer`
|
||||
* `State`
|
||||
* `StateRW`: State in terms of Reader/Writer.
|
||||
* `Trace`
|
||||
* `Exception`
|
||||
* Core components for defining your own Effects.
|
||||
The key features of `freer-simple` are:
|
||||
|
||||
- An efficient effect system for Haskell as a library.
|
||||
- Implementations for several common Haskell monads as effects:
|
||||
- `Reader`
|
||||
- `Writer`
|
||||
- `State`
|
||||
- `StateRW` — State in terms of Reader/Writer.
|
||||
- `Trace`
|
||||
- `Exception`
|
||||
- Core components for defining your own Effects.
|
||||
|
||||
# Example: Console DSL
|
||||
|
||||
Here's what using Freer looks like:
|
||||
Here's what using `freer-simple` looks like:
|
||||
|
||||
```haskell
|
||||
{-# LANGUAGE GADTs #-}
|
||||
@ -51,8 +36,7 @@ Here's what using Freer looks like:
|
||||
module Console where
|
||||
|
||||
import Control.Monad.Freer
|
||||
import Control.Monad.Freer.Internal
|
||||
import System.Exit hiding (ExitSuccess)
|
||||
import System.Exit hiding (ExitCode(ExitSuccess))
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Effect Model --
|
||||
@ -74,86 +58,59 @@ exitSuccess' = send ExitSuccess
|
||||
--------------------------------------------------------------------------------
|
||||
-- Effectful Interpreter --
|
||||
--------------------------------------------------------------------------------
|
||||
runConsole :: Eff '[Console] w -> IO w
|
||||
runConsole (Val x) = return x
|
||||
runConsole (E u q) =
|
||||
case extract u of
|
||||
PutStrLn msg -> putStrLn msg >> runConsole (qApp q ())
|
||||
GetLine -> getLine >>= \s -> runConsole (qApp q s)
|
||||
ExitSuccess -> exitSuccess
|
||||
runConsole :: Eff '[Console, IO] a -> IO a
|
||||
runConsole = runM . interpretM (\case
|
||||
PutStrLn msg -> putStrLn msg
|
||||
GetLine -> getLine
|
||||
ExitSuccess -> exitSuccess)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Pure Interpreter --
|
||||
--------------------------------------------------------------------------------
|
||||
runConsolePure :: [String] -> Eff '[Console] w -> [String]
|
||||
runConsolePure inputs req =
|
||||
reverse . snd $ run (handleRelayS (inputs, []) (\s _ -> pure s) go req)
|
||||
runConsolePure inputs req = snd . fst $
|
||||
run (runWriter (runState (runError (reinterpret3 go req)) inputs))
|
||||
where
|
||||
go :: ([String], [String])
|
||||
-> Console v
|
||||
-> (([String], [String]) -> Arr '[] v ([String], [String]))
|
||||
-> Eff '[] ([String], [String])
|
||||
go (is, os) (PutStrLn msg) q = q (is, msg : os) ()
|
||||
go (i:is, os) GetLine q = q (is, os) i
|
||||
go ([], _ ) GetLine _ = error "Not enough lines"
|
||||
go (_, os) ExitSuccess _ = pure ([], os)
|
||||
go :: Console v -> Eff '[Error (), State [String], Writer [String]] v
|
||||
go (PutStrLn msg) = tell [msg]
|
||||
go GetLine = get >>= \case
|
||||
[] -> error "not enough lines"
|
||||
(x:xs) -> put xs >> pure x
|
||||
go ExitSuccess = throwError ()
|
||||
```
|
||||
|
||||
|
||||
# Combining with Transformers
|
||||
|
||||
You already have some [`mtl`](http://hackage.haskell.org/package/mtl) code and
|
||||
are afraid that combining effects with your current tranformer stack would not
|
||||
be possible? Package
|
||||
[`freer-effects-extra`](https://github.com/trskop/freer-effects-extra) has some
|
||||
`mtl`-related and other goodies.
|
||||
|
||||
|
||||
# Contributing
|
||||
|
||||
Contributions are welcome! Documentation, examples, code, and feedback - they
|
||||
all help.
|
||||
Contributions are welcome! Documentation, examples, code, and feedback - they all help.
|
||||
|
||||
|
||||
## Developer Setup
|
||||
|
||||
The easiest way to start contributing is to install
|
||||
[stack](https://haskellstack.org/). Stack can install GHC/Haskell for you, and
|
||||
automates common developer tasks.
|
||||
The easiest way to start contributing is to install [stack](https://haskellstack.org/). Stack can install GHC/Haskell for you, and automates common developer tasks.
|
||||
|
||||
The key commands are:
|
||||
|
||||
* `stack setup` – install required version of GHC compiler
|
||||
* `stack build` – builds project, dependencies are automatically resolved
|
||||
* `stack test` – builds project, its tests, and executes the tests
|
||||
* `stack bench` – builds project, its benchmarks, and executes the benchamks
|
||||
* `stack ghci` – start a REPL instance with a project modules loaded
|
||||
* `stack clean`
|
||||
* `stack haddock` – builds documentation
|
||||
|
||||
For more information about `stack` tool can be found in its
|
||||
[documentation](https://haskellstack.org/).
|
||||
- `stack setup` — install required version of GHC compiler
|
||||
- `stack build` — builds project, dependencies are automatically resolved
|
||||
- `stack test` — builds project, its tests, and executes the tests
|
||||
- `stack bench` — builds project, its benchmarks, and executes the benchamks
|
||||
- `stack ghci` — start a REPL instance with a project modules loaded
|
||||
- `stack clean`
|
||||
- `stack haddock` — builds documentation
|
||||
|
||||
More information about `stack` can be found in its [documentation](https://haskellstack.org/).
|
||||
|
||||
# Licensing
|
||||
|
||||
This project is distrubted under a BSD3 license. See the included
|
||||
LICENSE file for more details.
|
||||
|
||||
|
||||
# Acknowledgements
|
||||
|
||||
Package `freer-effects` started as a fork of
|
||||
[freer](http://hackage.haskell.org/package/freer) authored by Allele Dev.
|
||||
Package `freer-effects` started as a fork of [freer-effects](http://hackage.haskell.org/package/freer-effects) by Ixperta Solutions, which in turn is a fork of [freer](http://hackage.haskell.org/package/freer) by Allele Dev. All implementations are based on the paper and reference implementation by Oleg Kiselyov. In particular:
|
||||
|
||||
This package would not be possible without the paper and the reference
|
||||
implementation. In particular:
|
||||
|
||||
* `Data.OpenUnion` maps to
|
||||
[OpenUnion51.hs](http://okmij.org/ftp/Haskell/extensible/OpenUnion51.hs)
|
||||
* `Data.FTCQueue` maps to
|
||||
[FTCQueue1](http://okmij.org/ftp/Haskell/extensible/FTCQueue1.hs)
|
||||
* `Control.Monad.Freer*` maps to
|
||||
[Eff1.hs](http://okmij.org/ftp/Haskell/extensible/Eff1.hs)
|
||||
- `Data.OpenUnion` maps to [OpenUnion51.hs](http://okmij.org/ftp/Haskell/extensible/OpenUnion51.hs)
|
||||
- `Data.FTCQueue` maps to [FTCQueue1](http://okmij.org/ftp/Haskell/extensible/FTCQueue1.hs)
|
||||
- `Control.Monad.Freer*` maps to [Eff1.hs](http://okmij.org/ftp/Haskell/extensible/Eff1.hs)
|
||||
|
||||
There will be deviations from the source.
|
||||
|
129
changelog.md
129
changelog.md
@ -1,128 +1,3 @@
|
||||
# Change Log
|
||||
# 1.0.0.0
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
* Introduced `replaceRelay` and `replaceRelayS`.
|
||||
[PR #27](https://github.com/IxpertaSolutions/freer-effects/pull/27)
|
||||
(**new**)
|
||||
* Fix: `Control.Monad.forever` causes `<<loop>>`
|
||||
[#23](https://github.com/IxpertaSolutions/freer-effects/issues/23)
|
||||
(**bug-fix**)
|
||||
* Switched to hpack format for package description, see [hpack
|
||||
documentation](https://github.com/sol/hpack#readme) for more details.
|
||||
Cabal file is still provided, but it is generated from `package.yaml`.
|
||||
(**change**)
|
||||
* Coroutines can now return values when they are done. This affects only the
|
||||
`Done` constructor of `Status` data type.
|
||||
[PR #25](https://github.com/IxpertaSolutions/freer-effects/pull/25)
|
||||
(**breaking-change**)
|
||||
* Introduced new handler `interposeC` for `Yield` effect (coroutines), and
|
||||
helper function named `replyC`.
|
||||
[PR #25](https://github.com/IxpertaSolutions/freer-effects/pull/25)
|
||||
(**new**)
|
||||
* Introduced `Fresh` effect handlers `runFresh` and `evalFresh`. Function
|
||||
`runFresh'` was deprecated in favour of `evalFresh`.
|
||||
[PR #24](https://github.com/IxpertaSolutions/freer-effects/pull/24)
|
||||
(**new, change**)
|
||||
* Introduced `raise` to weaken an effect stack.
|
||||
[PR #41](https://github.com/IxpertaSolutions/freer-effects/pull/41)
|
||||
(**new**)
|
||||
* Added support for custom type errors for unsolvable `Member` constraints.
|
||||
[PR #48](https://github.com/IxpertaSolutions/freer-effects/pull/48)
|
||||
(**new**)
|
||||
|
||||
## [0.3.0.1] (April 16, 2017)
|
||||
|
||||
* Relax `hlint` version bounds and disable `hlint` tests in non-developer
|
||||
builds.
|
||||
[#31](https://github.com/IxpertaSolutions/freer-effects/issues/31)
|
||||
|
||||
## [0.3.0.0] (March 06, 2017)
|
||||
|
||||
* Package renamed to `freer-effects` to distinguish it from original `freer`.
|
||||
[#4](https://github.com/IxpertaSolutions/freer-effects/issues/4)
|
||||
* Fix `Could not deduce: effs ~ (r : rs)` that may occur when using
|
||||
a `Member` contraint (a regression introduced in 0.2.4.0)
|
||||
[freer!12](https://gitlab.com/queertypes/freer/merge_requests/12)
|
||||
* Add `runNatS` convenience function
|
||||
[freer!13](https://gitlab.com/queertypes/freer/merge_requests/13)
|
||||
* Add `evalState` and `execState` convenience functions
|
||||
[freer!14](https://gitlab.com/queertypes/freer/merge_requests/14)
|
||||
* Data constructors of `Yield`, `CutFalse`, `Fresh`, `State` and `Trace`
|
||||
are now exposed in addition to `Error`, `Reader` and `Writer`
|
||||
* Generalised type signature of `asks`.
|
||||
[#7](https://github.com/IxpertaSolutions/freer-effects/issues/7)
|
||||
* Renamed modules `Data.Open.Union.*` to `Data.OpenUnion.*`.
|
||||
[#8](https://github.com/IxpertaSolutions/freer-effects/issues/8)
|
||||
* `NonDetEff` separated into its own module and renamed to `NonDet`.
|
||||
[#11](https://github.com/IxpertaSolutions/freer-effects/issues/11)
|
||||
* Reimplement `Union` using
|
||||
<http://okmij.org/ftp/Haskell/extensible/OpenUnion51.hs> as a basis.
|
||||
[#14](https://github.com/IxpertaSolutions/freer-effects/issues/14)
|
||||
* Renamed `Teletype` example DSL to `Console`.
|
||||
|
||||
## [0.2.4.1] (November 25, 2016)
|
||||
|
||||
* Restore GHC (7.8, 7.10) compatibility
|
||||
|
||||
## 0.2.4.0 (November 25, 2016)
|
||||
|
||||
* Internal reorg
|
||||
* In particular, hide implementation details in Union.Internal
|
||||
* Rewrite interpreters in terms of `extract` instead of `decomp`
|
||||
* Add `runNat` convenience function
|
||||
|
||||
## 0.2.3.0 (June 25, 2016)
|
||||
|
||||
* Add GHC 8 support
|
||||
|
||||
## 0.2.2.2 (Sep. 14, 2015)
|
||||
|
||||
* Use local `data Nat` for `Data.Open.Union`
|
||||
* Using GHC.TypeLits lead to overlapping instances
|
||||
|
||||
## 0.2.2.1 (Sep. 14, 2015)
|
||||
|
||||
* Document ALL THE THINGS
|
||||
|
||||
## 0.2.2.0 (Sep. 13, 2015)
|
||||
|
||||
* Add bench suite
|
||||
|
||||
## 0.2.1.0 (Sep. 13, 2015)
|
||||
|
||||
* Add test suite
|
||||
|
||||
## 0.2.0.2 (Sep. 12, 2015)
|
||||
|
||||
* Clean up language extensions per file
|
||||
* Add Teletype DSL to the README
|
||||
|
||||
## 0.2.0.1 (Sep. 12, 2015)
|
||||
|
||||
* Add Teletype DSL example
|
||||
* Expose `send` in public interface
|
||||
|
||||
## 0.2.0.0 (Sep. 12, 2015)
|
||||
|
||||
* Implement NonDetEff
|
||||
* Separate Cut/Coroutine out from Internals
|
||||
* Partial implementation: won't compile yet
|
||||
* Extract remaining examples from Internal comments
|
||||
|
||||
## 0.1.1.0 (Sep. 12, 2015)
|
||||
|
||||
* Warnings clean up
|
||||
* Examples separated from primary implementation
|
||||
* Initial project documentation added
|
||||
|
||||
## 0.1.0.0 (Sep. 12, 2015)
|
||||
|
||||
* Initial release
|
||||
|
||||
[Unreleased]: https://github.com/IxpertaSolutions/freer/compare/0.3.0.1...HEAD
|
||||
[0.3.0.1]: https://github.com/IxpertaSolutions/freer/compare/0.3.0.0...0.3.0.1
|
||||
[0.3.0.0]: https://github.com/IxpertaSolutions/freer/compare/0.2.4.1...0.3.0.0
|
||||
[0.2.4.1]: https://github.com/IxpertaSolutions/freer/compare/0.2.4.0...0.2.4.1
|
||||
- Initial release.
|
||||
|
@ -1,125 +0,0 @@
|
||||
-- This file has been generated from package.yaml by hpack version 0.18.1.
|
||||
--
|
||||
-- see: https://github.com/sol/hpack
|
||||
|
||||
name: freer-effects
|
||||
version: 0.3.0.0
|
||||
synopsis: Implementation of effect system for Haskell.
|
||||
description: Implementation of effect system for Haskell (actively maintained fork of
|
||||
<http://hackage.haskell.org/package/freer freer>), which is based on the
|
||||
work of Oleg Kiselyov et al.:
|
||||
.
|
||||
* <http://okmij.org/ftp/Haskell/extensible/more.pdf Freer Monads, More Extensible Effects>
|
||||
* <http://okmij.org/ftp/Haskell/zseq.pdf Reflection without Remorse>
|
||||
* <http://okmij.org/ftp/Haskell/extensible/exteff.pdf Extensible Effects>
|
||||
.
|
||||
The key features are:
|
||||
.
|
||||
* An efficient effect system for Haskell - as a library!
|
||||
* Reimplementations of several common Haskell monad transformers as effects.
|
||||
* Core components for defining your own Effects.
|
||||
category: Control
|
||||
homepage: https://github.com/lexi-lambda/freer-effects#readme
|
||||
bug-reports: https://github.com/lexi-lambda/freer-effects/issues
|
||||
author: Allele Dev, Ixcom Core Team, Alexis King, and other contributors
|
||||
maintainer: Alexis King <lexi.lambda@gmail.com>
|
||||
copyright: (c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.; 2017 Alexis King
|
||||
license: BSD3
|
||||
license-file: LICENSE
|
||||
build-type: Simple
|
||||
cabal-version: >= 1.10
|
||||
|
||||
extra-source-files:
|
||||
changelog.md
|
||||
README.md
|
||||
|
||||
source-repository head
|
||||
type: git
|
||||
location: https://github.com/lexi-lambda/freer-effects
|
||||
|
||||
library
|
||||
hs-source-dirs:
|
||||
src
|
||||
default-extensions: ConstraintKinds DataKinds DeriveFunctor FlexibleContexts FlexibleInstances GADTs LambdaCase MultiParamTypeClasses RankNTypes ScopedTypeVariables TypeApplications TypeOperators
|
||||
ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
|
||||
build-depends:
|
||||
base >= 4.9 && < 5
|
||||
, natural-transformation >= 0.2
|
||||
, transformers-base
|
||||
exposed-modules:
|
||||
Control.Monad.Freer
|
||||
Control.Monad.Freer.Coroutine
|
||||
Control.Monad.Freer.Cut
|
||||
Control.Monad.Freer.Error
|
||||
Control.Monad.Freer.Fresh
|
||||
Control.Monad.Freer.Internal
|
||||
Control.Monad.Freer.NonDet
|
||||
Control.Monad.Freer.Reader
|
||||
Control.Monad.Freer.State
|
||||
Control.Monad.Freer.StateRW
|
||||
Control.Monad.Freer.Trace
|
||||
Control.Monad.Freer.Writer
|
||||
Data.FTCQueue
|
||||
Data.OpenUnion
|
||||
Data.OpenUnion.Internal
|
||||
other-modules:
|
||||
Paths_freer_effects
|
||||
default-language: Haskell2010
|
||||
|
||||
executable freer-examples
|
||||
main-is: Main.hs
|
||||
hs-source-dirs:
|
||||
examples/src
|
||||
default-extensions: ConstraintKinds DataKinds DeriveFunctor FlexibleContexts FlexibleInstances GADTs LambdaCase MultiParamTypeClasses RankNTypes ScopedTypeVariables TypeApplications TypeOperators
|
||||
ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
|
||||
build-depends:
|
||||
base >= 4.9 && < 5
|
||||
, freer-effects
|
||||
other-modules:
|
||||
Capitalize
|
||||
Console
|
||||
Coroutine
|
||||
Cut
|
||||
Fresh
|
||||
Trace
|
||||
default-language: Haskell2010
|
||||
|
||||
test-suite unit
|
||||
type: exitcode-stdio-1.0
|
||||
main-is: Tests.hs
|
||||
hs-source-dirs:
|
||||
tests
|
||||
default-extensions: ConstraintKinds DataKinds DeriveFunctor FlexibleContexts FlexibleInstances GADTs LambdaCase MultiParamTypeClasses RankNTypes ScopedTypeVariables TypeApplications TypeOperators
|
||||
ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
|
||||
build-depends:
|
||||
base >= 4.9 && < 5
|
||||
, QuickCheck
|
||||
, freer-effects
|
||||
, tasty
|
||||
, tasty-hunit
|
||||
, tasty-quickcheck
|
||||
other-modules:
|
||||
Tests.Coroutine
|
||||
Tests.Exception
|
||||
Tests.Fresh
|
||||
Tests.Loop
|
||||
Tests.NonDet
|
||||
Tests.Reader
|
||||
Tests.State
|
||||
default-language: Haskell2010
|
||||
|
||||
benchmark core
|
||||
type: exitcode-stdio-1.0
|
||||
main-is: Core.hs
|
||||
hs-source-dirs:
|
||||
bench
|
||||
default-extensions: ConstraintKinds DataKinds DeriveFunctor FlexibleContexts FlexibleInstances GADTs LambdaCase MultiParamTypeClasses RankNTypes ScopedTypeVariables TypeApplications TypeOperators
|
||||
ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -O2
|
||||
build-depends:
|
||||
base >= 4.9 && < 5
|
||||
, criterion
|
||||
, extensible-effects >= 1.11 && < 1.12
|
||||
, free
|
||||
, freer-effects
|
||||
, mtl
|
||||
default-language: Haskell2010
|
24
package.yaml
24
package.yaml
@ -1,11 +1,11 @@
|
||||
name: freer-effects
|
||||
version: 0.3.0.0
|
||||
name: freer-simple
|
||||
version: 1.0.0.0
|
||||
category: Control
|
||||
synopsis: Implementation of effect system for Haskell.
|
||||
synopsis: Implementation of an effect system for Haskell.
|
||||
description: |
|
||||
Implementation of effect system for Haskell (actively maintained fork of
|
||||
<http://hackage.haskell.org/package/freer freer>), which is based on the
|
||||
work of Oleg Kiselyov et al.:
|
||||
An implementation of an effect system for Haskell (a fork of
|
||||
<http://hackage.haskell.org/package/freer-effects freer-effects>), which is
|
||||
based on the work of Oleg Kiselyov et al.:
|
||||
|
||||
* <http://okmij.org/ftp/Haskell/extensible/more.pdf Freer Monads, More Extensible Effects>
|
||||
* <http://okmij.org/ftp/Haskell/zseq.pdf Reflection without Remorse>
|
||||
@ -16,16 +16,16 @@ description: |
|
||||
* An efficient effect system for Haskell - as a library!
|
||||
* Reimplementations of several common Haskell monad transformers as effects.
|
||||
* Core components for defining your own Effects.
|
||||
github: lexi-lambda/freer-effects
|
||||
|
||||
github: lexi-lambda/freer-simple
|
||||
license: BSD3
|
||||
author: Allele Dev, Ixcom Core Team, Alexis King, and other contributors
|
||||
maintainer: Alexis King <lexi.lambda@gmail.com>
|
||||
copyright: (c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.; 2017 Alexis King
|
||||
|
||||
extra-source-files:
|
||||
- CHANGELOG.md
|
||||
- README.md
|
||||
- changelog.md
|
||||
|
||||
ghc-options:
|
||||
- -Wall
|
||||
@ -62,7 +62,7 @@ executables:
|
||||
source-dirs: examples/src
|
||||
main: Main.hs
|
||||
dependencies:
|
||||
- freer-effects
|
||||
- freer-simple
|
||||
|
||||
tests:
|
||||
unit:
|
||||
@ -70,7 +70,7 @@ tests:
|
||||
main: Tests.hs
|
||||
dependencies:
|
||||
- QuickCheck
|
||||
- freer-effects
|
||||
- freer-simple
|
||||
- tasty
|
||||
- tasty-hunit
|
||||
- tasty-quickcheck
|
||||
@ -82,7 +82,7 @@ benchmarks:
|
||||
ghc-options: -O2
|
||||
dependencies:
|
||||
- criterion
|
||||
- extensible-effects >= 1.11 && < 1.12
|
||||
- extensible-effects
|
||||
- free
|
||||
- freer-effects
|
||||
- freer-simple
|
||||
- mtl
|
||||
|
Loading…
Reference in New Issue
Block a user