Commit Graph

44 Commits

Author SHA1 Message Date
Peter Trsko
766e4e03ab Enhanced docs, and applied coding style to Reader 2017-02-02 20:10:29 +01:00
Peter Trsko
eb9ec89ec7 Making HLint happy
Partly addresses #6
2017-02-02 20:10:29 +01:00
Peter Trsko
252c183469 Renaming to freer-effects; updating copyright and package description
Addresses #4
2017-02-02 20:06:51 +01:00
Peter Trško
c5d13db140 Using NoImplicitPrelude in State module
This should help us resolve issues with various versions of base
packages more easily.

Reason for doing it now is that base bundled with GHC 7.8.4 doesn't
export (<$>) in Prelude.
2017-01-29 10:56:46 +01:00
Peter Trško
ba69fc856d Merge pull request #1 from IxpertaSolutions/evalstate-execstate
Added evalState and execState
2017-01-29 10:44:28 +01:00
Tomas Janousek
85d6c14b03 Use MIN_VERSION_package macros instead of __GLASGOW_HASKELL__
It maybe sort of works for base but for mtl it's downright wrong.
2017-01-28 15:42:44 +01:00
Tomas Janousek
dd943e6ae0 Fix GHC 7.8 and 7.10 compatibility again 2017-01-28 15:11:37 +01:00
Tomas Janousek
958dbe0262 Expose data constructors of all included effects
I've seen people use unsafeCoerce to write their own interpreter for the
State effect. Ugh. :-)

d27099c8ee/src/Control/Monad/Freer/State/Extra.hs (L95)
2017-01-28 12:37:50 +01:00
Tomas Janousek
82734c04dd Add runNatS convenience function
`runNatS` is to `runNat` as `handleRelayS` is to `handleRelay`.
2017-01-28 12:14:50 +01:00
Tomas Janousek
84022b9103 Match coding style of runNat with the rest of the codebase
This is really minor but the next commit adds a `runNatS` function that
would require a 5-var forall and that's starting to be really confusing,
making people think why it's there.
2017-01-28 12:14:17 +01:00
Tomas Janousek
8060429c52 Fix "Could not deduce: effs ~ (r : rs)" errors
Commit 4260466929 added the "r has at
least two elements" constraint to the `Member' t r ('S n)` instance but
`Member t effs` with a general (unknown) effs isn't enough to deduce
that effs is non-empty, so this doesn't typecheck:

    f :: Eff (IO ': effs) () -> Eff effs ()
    f = undefined

    g :: (Member Maybe effs) => Eff effs ()
    g = undefined

    h :: (Member Maybe effs) => Eff effs ()
    h = f g

GHC complains that it could not deduce: `effs ~ (r : rs)` arising from
the use of `g`. It can be worked around by using this instead:

    h :: (Member Maybe (e ': es)) => Eff (e ': es) ()
    h = f g

but I don't think this is a good user experience, and it's a regression
from 0.2.3.0 that would normally require a major version bump to 0.3 as
it breaks existing code. Therefore a fix should go in quickly and should
get into lts-7 asap.

This commit adds the "effs is non-empty" constraint to `Member t effs`
so the above typechecks again.
2017-01-28 12:12:24 +01:00
Sam Quinn
f0045d9d6c Added evalState and execState 2017-01-21 10:36:50 -06:00
Allele Dev
ce81c61670
fix: GHC 7.8 and 7.10 compatibility 2016-11-25 02:21:34 -07:00
Eric Easley
2396075525 Add runNat convenience function 2016-11-16 09:44:45 -08:00
Eric Easley
0e8a6da11a Make Union a Functor 2016-11-16 09:44:36 -08:00
Eric Easley
4e1d228ba7 Don't rely on internals in example 2016-11-16 09:11:22 -08:00
Eric Easley
4260466929 Add extract for safely extracting final element from union 2016-11-15 23:01:37 -08:00
Eric Easley
d5393e72aa Make Union visible in through an Internal module 2016-11-15 19:23:19 -08:00
Allele Dev
995e2d69bd
fix: deadname issue, update copyright 2016-11-14 19:43:47 -07:00
Allele Dev
3e2fcd3ef0 Merge branch 'topic/seven_eight' into 'master'
CPP around differences in 7.8 vs 7.10



See merge request !7
2016-09-07 08:41:59 +00:00
Tim McGilchrist
a8f9b354a7 CPP around differences in 7.8 vs 7.10 2016-04-21 11:05:08 +10:00
Tim McGilchrist
e1107cb059 Remove asks from examples. 2016-04-21 08:58:47 +10:00
Allele Dev
fe8b456f04 Merge branch 'topic/asks' into 'master'
Add asks function same as Control.Monad.Reader.



See merge request !4
2016-04-17 02:30:42 +00:00
Tim McGilchrist
f711144f83 Add asks function same as Control.Monad.Reader. 2016-04-14 09:40:57 +10:00
Tim McGilchrist
3e24046cef Haddock examples for Reader effects. 2016-04-14 09:21:49 +10:00
ElvishJerricco
972a747806 Merge branches 'runC', 'nonDetEff', 'writerMonoid', 'stateProxy' and 'runM' 2016-03-03 11:39:08 -05:00
ElvishJerricco
ae929c9d31 Fixed runC in Coroutine.hs 2016-03-03 10:56:02 -05:00
ElvishJerricco
0846542b7d Made writer work with arbitrary Monoids, not just lists 2016-03-03 10:28:06 -05:00
ElvishJerricco
1eaf97ada5 Added modify function for State effect 2016-03-03 10:27:31 -05:00
ElvishJerricco
323bd8113f Use Data.Proxy instead of ProxyState 2016-03-03 10:25:45 -05:00
ElvishJerricco
18379332a6 Added runM for running arbitrary monads as final effects 2016-03-02 05:49:30 -05:00
Will Fancher
86a8212cd8 Added Members Constraint
The Members type family (closed) takes two type-level lists, m and r,
as parameters. m contains the effect labels which should be members of
r. The resulting type is a constraint requiring that all elements of m
be members of r.

This simplifies constraints that require multiple members of the same
effect list. For example.

ioState :: (Member IO r, Member (State Int) r) => Eff r ()

becomes

ioState :: Members '[IO, State Int] r => Eff r ()

Furthermore, it allows apps to easily define their typical effect
constraints alongside the typical runtime effect.

type AppEffs = '[State Int, Writer String, IO]
type AppConstraint r = Members AppEffs r
type RunApp = Eff AppEffs
2016-02-07 06:37:45 -05:00
Alej Cabrera
dc2be626b6 fix(Union): revert GHC.TypeLits; overlaps insts 2015-09-14 02:27:58 -05:00
Alej Cabrera
b67831581f docs: fix build 2015-09-14 02:07:26 -05:00
Alej Cabrera
f77650b0c7 fix: build - Y -> Status 2015-09-14 02:02:36 -05:00
Alej Cabrera
ca9be3ed22 docs: add module level documentation 2015-09-14 02:01:22 -05:00
Alej Cabrera
e0886b0f79 Open.Union: use GHC.TypeLits.Nat 2015-09-14 00:36:58 -05:00
Alej Cabrera
fd5d8d86c8 release(0.2.0.2): Teletype, cleanup 2015-09-12 14:14:47 -05:00
Alej Cabrera
7b404638a1 add: expose send from Freer 2015-09-12 14:03:30 -05:00
Alej Cabrera
59645ed8cb docs(Union): add some commentary 2015-09-12 14:02:25 -05:00
Alej Cabrera
fa212cb126 add(0.2.0): NonDetEff; more clean up
* Implement NonDetEff
* Separate Cut/Coroutine out from Internals
  * Partial implementation: won't compile yet
* Extract remaining examples from Internal comments
2015-09-12 03:01:16 -05:00
Alej Cabrera
0c6457d3e9 release(0.1.1): fix all warnings; separate examples 2015-09-12 01:21:40 -05:00
Alej Cabrera
b469ca6ffd style(*): apply hlint 2015-09-12 00:43:39 -05:00
Alej Cabrera
7897b40ec9 initial commit 2015-09-12 00:38:18 -05:00