Commit Graph

222 Commits

Author SHA1 Message Date
Tomas Janousek
dd943e6ae0 Fix GHC 7.8 and 7.10 compatibility again 2017-01-28 15:11:37 +01:00
Tomas Janousek
bf588dcd06 Add README badges 2017-01-28 14:44:50 +01:00
Tomas Janousek
019a7467d9 Add .travis.yml 2017-01-28 14:38:55 +01:00
Tomas Janousek
ed556f85ad Fix randomly failing "Multiple readers work" test
Comparing floating points using (==) is a bad idea. I don't see how this
could possible have ever worked. :-/
2017-01-28 12:57:31 +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
Tomas Janousek
674dd1b5ec README/changelog/cabal cleanup 2017-01-28 12:11:58 +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
Allele Dev
0f553b2b99
release: 0.2.4.0 2016-11-24 23:46:19 -07:00
Allele Dev
3b6172714d Merge branch 'master' into 'master'
Miscellany

I can split these commits out into separate merge requests if you'd prefer.

See merge request !11
2016-11-25 06:38:37 +00: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
4db284765f Merge branch 'name-change' into 'master'
fix: deadname issue, update copyright

See merge request !10
2016-11-15 02:44:34 +00:00
Allele Dev
995e2d69bd
fix: deadname issue, update copyright 2016-11-14 19:43:47 -07:00
Allele Dev
db5e7a2c06 Merge branch 'rename-examples' into 'master'
Rename examples binary to the less generic freer-examples to avoid name collisio…

…ns when installed globally.

See merge request !9
2016-11-13 22:32:38 +00:00
Lana Black
11cfda77ae Rename examples binary to the less generic freer-examples to avoid name collisions when installed globally. 2016-11-12 12:15:42 +00: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
Allele Dev
a2914d7eef
add: GHC 8 support 2016-06-25 15:08:34 -04:00
Tim McGilchrist
a8f9b354a7 CPP around differences in 7.8 vs 7.10 2016-04-21 11:05:08 +10:00
Allele Dev
ba71d26a16 Merge branch 'topic/remove_asks' into 'master'
Remove asks from examples.



See merge request !6
2016-04-21 00:50:24 +00:00
Tim McGilchrist
e1107cb059 Remove asks from examples. 2016-04-21 08:58:47 +10:00
Allele Dev
f332bc71b0 Merge branch 'fix-tests' into 'master'
Fix tests: Add Tests.Coroutine to cabal file

Addresses #5 

See merge request !5
2016-04-17 02:36:16 +00:00
Allele Dev
d09e9e5075
ensure Tests.Coroutine is included 2016-04-16 21:34:33 -05:00
Allele Dev
3ba79b765b
prevent stack.yaml from being checked in 2016-04-16 21:33:09 -05:00
Allele Dev
d8770d1a20
rm: stack.yaml - should be generated by user 2016-04-16 21:32:38 -05: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
Allele Dev
62f201e673 Merge branch 'topic/reader_examples' into 'master'
Haddock examples for Reader effects.

Simple examples that mirror those in Control.Monad.Reader.

See merge request !3
2016-04-17 02:29:51 +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
Allele Dev
41d43f07ce
correct repo location 2016-04-06 15:30:00 -05:00
Allele Dev
c40cdc7e9b
Merge branch 'master' of gitlab.com:queertypes/freer 2016-04-06 15:28:17 -05:00
Allele Dev
36fb6d62bc Merge branch 'master' into 'master'
Various improvements and fixes.

* Fixed `ifte` and made the `nonDetEffTests` better.
* Fixed `runC` for the `Yield` effect.
* Added a `runM` handler for running an arbitrary monad (if it's the only effect left to handle).
* Added a `modify` function for the State effect.
* Removed the `ProxyState` type wasn't necessary in favor of `Data.Proxy`.
* Made the `Writer` effect work with arbitrary monoids instead of just lists.

See merge request !2
2016-03-07 12:00:50 +00:00
ElvishJerricco
972a747806 Merge branches 'runC', 'nonDetEff', 'writerMonoid', 'stateProxy' and 'runM' 2016-03-03 11:39:08 -05:00
ElvishJerricco
e362e9f508 Simple Coroutine test 2016-03-03 10:56:02 -05:00
ElvishJerricco
ae929c9d31 Fixed runC in Coroutine.hs 2016-03-03 10:56:02 -05:00
ElvishJerricco
b1798dc0e2 Improved nonDetEffTests with testProperty 2016-03-03 10:29:13 -05:00
ElvishJerricco
a7f7be7973 Fixed nonDetEffTests
The problem was the definition of `ifte`. It reported `el` if `th` was
`const mzero`.
2016-03-03 10:29:13 -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
Allele Dev
9ea4a4e837 add: Members, for type list effects 2016-02-25 19:59:18 -06:00
Allele Dev
a2b5208eea Merge branch 'master' into 'master'
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

See merge request !1
2016-02-26 00:50:42 +00: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