mirror of
https://github.com/lexi-lambda/freer-simple.git
synced 2024-12-24 14:43:57 +03:00
Rename project to freer-simple
This commit is contained in:
parent
8a5570174c
commit
e89ed8911f
115
.travis.yml
115
.travis.yml
@ -1,99 +1,46 @@
|
|||||||
# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
|
|
||||||
language: c
|
language: c
|
||||||
sudo: false
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- $HOME/.cabsnap
|
- $HOME/.stack
|
||||||
- $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
|
|
||||||
|
|
||||||
|
# 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:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- env: CABALVER=1.18 GHCVER=7.8.4 HAPPYVER=1.19.3 DO_CHECKS=0
|
- env: ARGS="--resolver lts-7"
|
||||||
compiler: ": #GHC 7.8.4"
|
compiler: ": #stack 8.0.1"
|
||||||
addons: {apt: {packages: [cabal-install-1.18, ghc-7.8.4, happy-1.19.3], sources: [hvr-ghc]}}
|
addons: { apt: { packages: [libgmp-dev] } }
|
||||||
- env: CABALVER=1.22 GHCVER=7.10.3 HAPPYVER=1.19.4 DO_CHECKS=0
|
|
||||||
compiler: ": #GHC 7.10.3"
|
- env: ARGS="--resolver lts-8"
|
||||||
addons: {apt: {packages: [cabal-install-1.22, ghc-7.10.3, happy-1.19.4], sources: [hvr-ghc]}}
|
compiler: ": #stack 8.0.2"
|
||||||
- env: CABALVER=1.24 GHCVER=8.0.1 HAPPYVER=1.19.5 DO_CHECKS=1
|
addons: { apt: { packages: [libgmp-dev] } }
|
||||||
compiler: ": #GHC 8.0.1"
|
|
||||||
addons: {apt: {packages: [cabal-install-1.24, ghc-8.0.1, happy-1.19.5], sources: [hvr-ghc]}}
|
- env: ARGS="--resolver nightly-2017-07-31"
|
||||||
- env: CABALVER=1.24 GHCVER=8.0.2 HAPPYVER=1.19.5 DO_CHECKS=1
|
compiler: ": #stack 8.2.1"
|
||||||
compiler: ": #GHC 8.0.2"
|
addons: { apt: { packages: [libgmp-dev] } }
|
||||||
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
|
- env: ARGS="--resolver nightly"
|
||||||
compiler: ": #GHC head"
|
compiler: ": #stack nightly"
|
||||||
addons: {apt: {packages: [cabal-install-head, ghc-head, happy-1.19.5], sources: [hvr-ghc]}}
|
addons: { apt: { packages: [libgmp-dev] } }
|
||||||
|
|
||||||
allow_failures:
|
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:
|
before_install:
|
||||||
- unset CC
|
# Using compiler above sets CC to an invalid value, so unset it
|
||||||
- export PATH=/opt/happy/$HAPPYVER/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
|
- unset CC
|
||||||
- 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:
|
install:
|
||||||
- cabal --version
|
- stack --no-terminal --install-ghc $ARGS test --bench --only-dependencies
|
||||||
- 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
|
|
||||||
|
|
||||||
# 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:
|
script:
|
||||||
- if [ -f configure.ac ]; then autoreconf -i; fi
|
- stack --no-terminal $ARGS test --bench --no-run-benchmarks --haddock --no-haddock-deps --ghc-options=-Werror
|
||||||
# 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
|
|
||||||
|
133
README.md
133
README.md
@ -1,47 +1,32 @@
|
|||||||
# Freer Effects: Extensible Effects with Freer Monads
|
# 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)
|
||||||
|
|
||||||
[![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)
|
|
||||||
|
|
||||||
|
|
||||||
# Description
|
# Description
|
||||||
|
|
||||||
Library `freer-effects` (actively maintained fork of
|
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`](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.:
|
|
||||||
|
|
||||||
* [Freer Monads, More Extensible Effects](http://okmij.org/ftp/Haskell/extensible/more.pdf)
|
- [Freer Monads, More Extensible Effects](http://okmij.org/ftp/Haskell/extensible/more.pdf)
|
||||||
* [Reflection without Remorse](http://okmij.org/ftp/Haskell/zseq.pdf)
|
- [Reflection without Remorse](http://okmij.org/ftp/Haskell/zseq.pdf)
|
||||||
* [Extensible Effects](http://okmij.org/ftp/Haskell/extensible/exteff.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/).
|
|
||||||
|
|
||||||
|
Much of the implementation is a repackaging and cleaning up of the reference materials provided [here](http://okmij.org/ftp/Haskell/extensible/).
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
||||||
The key features of Freer are:
|
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.
|
|
||||||
|
|
||||||
|
- 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
|
# Example: Console DSL
|
||||||
|
|
||||||
Here's what using Freer looks like:
|
Here's what using `freer-simple` looks like:
|
||||||
|
|
||||||
```haskell
|
```haskell
|
||||||
{-# LANGUAGE GADTs #-}
|
{-# LANGUAGE GADTs #-}
|
||||||
@ -51,8 +36,7 @@ Here's what using Freer looks like:
|
|||||||
module Console where
|
module Console where
|
||||||
|
|
||||||
import Control.Monad.Freer
|
import Control.Monad.Freer
|
||||||
import Control.Monad.Freer.Internal
|
import System.Exit hiding (ExitCode(ExitSuccess))
|
||||||
import System.Exit hiding (ExitSuccess)
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Effect Model --
|
-- Effect Model --
|
||||||
@ -74,86 +58,59 @@ exitSuccess' = send ExitSuccess
|
|||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Effectful Interpreter --
|
-- Effectful Interpreter --
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
runConsole :: Eff '[Console] w -> IO w
|
runConsole :: Eff '[Console, IO] a -> IO a
|
||||||
runConsole (Val x) = return x
|
runConsole = runM . interpretM (\case
|
||||||
runConsole (E u q) =
|
PutStrLn msg -> putStrLn msg
|
||||||
case extract u of
|
GetLine -> getLine
|
||||||
PutStrLn msg -> putStrLn msg >> runConsole (qApp q ())
|
ExitSuccess -> exitSuccess)
|
||||||
GetLine -> getLine >>= \s -> runConsole (qApp q s)
|
|
||||||
ExitSuccess -> exitSuccess
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Pure Interpreter --
|
-- Pure Interpreter --
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
runConsolePure :: [String] -> Eff '[Console] w -> [String]
|
runConsolePure :: [String] -> Eff '[Console] w -> [String]
|
||||||
runConsolePure inputs req =
|
runConsolePure inputs req = snd . fst $
|
||||||
reverse . snd $ run (handleRelayS (inputs, []) (\s _ -> pure s) go req)
|
run (runWriter (runState (runError (reinterpret3 go req)) inputs))
|
||||||
where
|
where
|
||||||
go :: ([String], [String])
|
go :: Console v -> Eff '[Error (), State [String], Writer [String]] v
|
||||||
-> Console v
|
go (PutStrLn msg) = tell [msg]
|
||||||
-> (([String], [String]) -> Arr '[] v ([String], [String]))
|
go GetLine = get >>= \case
|
||||||
-> Eff '[] ([String], [String])
|
[] -> error "not enough lines"
|
||||||
go (is, os) (PutStrLn msg) q = q (is, msg : os) ()
|
(x:xs) -> put xs >> pure x
|
||||||
go (i:is, os) GetLine q = q (is, os) i
|
go ExitSuccess = throwError ()
|
||||||
go ([], _ ) GetLine _ = error "Not enough lines"
|
|
||||||
go (_, os) ExitSuccess _ = pure ([], os)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# 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
|
# Contributing
|
||||||
|
|
||||||
Contributions are welcome! Documentation, examples, code, and feedback - they
|
Contributions are welcome! Documentation, examples, code, and feedback - they all help.
|
||||||
all help.
|
|
||||||
|
|
||||||
|
|
||||||
## Developer Setup
|
## Developer Setup
|
||||||
|
|
||||||
The easiest way to start contributing is to install
|
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.
|
||||||
[stack](https://haskellstack.org/). Stack can install GHC/Haskell for you, and
|
|
||||||
automates common developer tasks.
|
|
||||||
|
|
||||||
The key commands are:
|
The key commands are:
|
||||||
|
|
||||||
* `stack setup` – install required version of GHC compiler
|
- `stack setup` — install required version of GHC compiler
|
||||||
* `stack build` – builds project, dependencies are automatically resolved
|
- `stack build` — builds project, dependencies are automatically resolved
|
||||||
* `stack test` – builds project, its tests, and executes the tests
|
- `stack test` — builds project, its tests, and executes the tests
|
||||||
* `stack bench` – builds project, its benchmarks, and executes the benchamks
|
- `stack bench` — builds project, its benchmarks, and executes the benchamks
|
||||||
* `stack ghci` – start a REPL instance with a project modules loaded
|
- `stack ghci` — start a REPL instance with a project modules loaded
|
||||||
* `stack clean`
|
- `stack clean`
|
||||||
* `stack haddock` – builds documentation
|
- `stack haddock` — builds documentation
|
||||||
|
|
||||||
For more information about `stack` tool can be found in its
|
|
||||||
[documentation](https://haskellstack.org/).
|
|
||||||
|
|
||||||
|
More information about `stack` can be found in its [documentation](https://haskellstack.org/).
|
||||||
|
|
||||||
# Licensing
|
# Licensing
|
||||||
|
|
||||||
This project is distrubted under a BSD3 license. See the included
|
This project is distrubted under a BSD3 license. See the included
|
||||||
LICENSE file for more details.
|
LICENSE file for more details.
|
||||||
|
|
||||||
|
|
||||||
# Acknowledgements
|
# Acknowledgements
|
||||||
|
|
||||||
Package `freer-effects` started as a fork of
|
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:
|
||||||
[freer](http://hackage.haskell.org/package/freer) authored by Allele Dev.
|
|
||||||
|
|
||||||
This package would not be possible without the paper and the reference
|
- `Data.OpenUnion` maps to [OpenUnion51.hs](http://okmij.org/ftp/Haskell/extensible/OpenUnion51.hs)
|
||||||
implementation. In particular:
|
- `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.
|
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.
|
- Initial release.
|
||||||
|
|
||||||
## [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
|
|
||||||
|
@ -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
|
name: freer-simple
|
||||||
version: 0.3.0.0
|
version: 1.0.0.0
|
||||||
category: Control
|
category: Control
|
||||||
synopsis: Implementation of effect system for Haskell.
|
synopsis: Implementation of an effect system for Haskell.
|
||||||
description: |
|
description: |
|
||||||
Implementation of effect system for Haskell (actively maintained fork of
|
An implementation of an effect system for Haskell (a fork of
|
||||||
<http://hackage.haskell.org/package/freer freer>), which is based on the
|
<http://hackage.haskell.org/package/freer-effects freer-effects>), which is
|
||||||
work of Oleg Kiselyov et al.:
|
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/extensible/more.pdf Freer Monads, More Extensible Effects>
|
||||||
* <http://okmij.org/ftp/Haskell/zseq.pdf Reflection without Remorse>
|
* <http://okmij.org/ftp/Haskell/zseq.pdf Reflection without Remorse>
|
||||||
@ -16,16 +16,16 @@ description: |
|
|||||||
* An efficient effect system for Haskell - as a library!
|
* An efficient effect system for Haskell - as a library!
|
||||||
* Reimplementations of several common Haskell monad transformers as effects.
|
* Reimplementations of several common Haskell monad transformers as effects.
|
||||||
* Core components for defining your own Effects.
|
* Core components for defining your own Effects.
|
||||||
github: lexi-lambda/freer-effects
|
|
||||||
|
|
||||||
|
github: lexi-lambda/freer-simple
|
||||||
license: BSD3
|
license: BSD3
|
||||||
author: Allele Dev, Ixcom Core Team, Alexis King, and other contributors
|
author: Allele Dev, Ixcom Core Team, Alexis King, and other contributors
|
||||||
maintainer: Alexis King <lexi.lambda@gmail.com>
|
maintainer: Alexis King <lexi.lambda@gmail.com>
|
||||||
copyright: (c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.; 2017 Alexis King
|
copyright: (c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.; 2017 Alexis King
|
||||||
|
|
||||||
extra-source-files:
|
extra-source-files:
|
||||||
|
- CHANGELOG.md
|
||||||
- README.md
|
- README.md
|
||||||
- changelog.md
|
|
||||||
|
|
||||||
ghc-options:
|
ghc-options:
|
||||||
- -Wall
|
- -Wall
|
||||||
@ -62,7 +62,7 @@ executables:
|
|||||||
source-dirs: examples/src
|
source-dirs: examples/src
|
||||||
main: Main.hs
|
main: Main.hs
|
||||||
dependencies:
|
dependencies:
|
||||||
- freer-effects
|
- freer-simple
|
||||||
|
|
||||||
tests:
|
tests:
|
||||||
unit:
|
unit:
|
||||||
@ -70,7 +70,7 @@ tests:
|
|||||||
main: Tests.hs
|
main: Tests.hs
|
||||||
dependencies:
|
dependencies:
|
||||||
- QuickCheck
|
- QuickCheck
|
||||||
- freer-effects
|
- freer-simple
|
||||||
- tasty
|
- tasty
|
||||||
- tasty-hunit
|
- tasty-hunit
|
||||||
- tasty-quickcheck
|
- tasty-quickcheck
|
||||||
@ -82,7 +82,7 @@ benchmarks:
|
|||||||
ghc-options: -O2
|
ghc-options: -O2
|
||||||
dependencies:
|
dependencies:
|
||||||
- criterion
|
- criterion
|
||||||
- extensible-effects >= 1.11 && < 1.12
|
- extensible-effects
|
||||||
- free
|
- free
|
||||||
- freer-effects
|
- freer-simple
|
||||||
- mtl
|
- mtl
|
||||||
|
Loading…
Reference in New Issue
Block a user