Commit Graph

56 Commits

Author SHA1 Message Date
Denis Buzdalov
8fb18e24a1 [ fix ] Make standard monad transformer's Alternative be lazy on 2nd arg 2021-08-11 11:33:46 +01:00
Denis Buzdalov
99f1e11ddb [ cleanup ] Slightly improve readability 2021-08-11 11:33:46 +01:00
Denis Buzdalov
9357d777f6 [ base ] Relax requirement of Alternative implementation for ReaderT 2021-08-11 11:33:46 +01:00
G. Allais
21c6f4fb79
[ breaking ] remove parsing of dangling binders (#1711)
* [ breaking ] remove parsing of dangling binders

It used to be the case that

```
ID : Type -> Type
ID a = a

test : ID (a : Type) -> a -> a
test = \ a, x => x
```

and

```
head : List $ a -> Maybe a
head [] = Nothing
head (x :: _) = Just x
```

were accepted but these are now rejected because:

* `ID (a : Type) -> a -> a` is parsed as `(ID (a : Type)) -> a -> a`
* `List $ a -> Maybe a` is parsed as `List (a -> Maybe a)`

Similarly if you want to use a lambda / rewrite / let expression as
part of the last argument of an application, the use of `$` or parens
is now mandatory.

This should hopefully allow us to make progress on #1703
2021-08-10 19:24:32 +01:00
Denis Buzdalov
bf0985602f [ totality ] More %default total stuff 2021-06-12 21:06:08 -05:00
Fabián Heredia Montiel
dad4dcdaf8 Add totality annotations to src and libs/{prelude, base} 2021-06-12 21:06:08 -05:00
stefan-hoeck
047fdb50dd [ new ] missing Identity implementations 2021-04-25 10:41:36 +01:00
stefan-hoeck
cb7add2eca [ new ] add Const applicative functor 2021-04-25 10:41:36 +01:00
G. Allais
cee7e38894
[ new ] Proof search from 'Applications of Applicative Proof Search' (#1093) 2021-03-01 08:29:43 +00:00
stefan-hoeck
92b9833ee2 fixed doc for WriterT 2021-01-21 13:25:48 +01:00
stefan-hoeck
fd4851c0f5 strict, not stricht 2021-01-21 13:24:40 +01:00
stefan-hoeck
d36a234041 finished MonadRWS 2021-01-20 05:58:19 +01:00
stefan-hoeck
e906b28cae removed MonadState functions from RWS.CPS.idr 2021-01-20 05:51:39 +01:00
stefan-hoeck
e8f2f56768 removed MonadWriter functions from RWS.CPS.idr 2021-01-20 05:48:43 +01:00
stefan-hoeck
6f2e358f1b removed MonadReader functions from RWS.CPS.idr 2021-01-20 05:45:32 +01:00
stefan-hoeck
2776eaa1b1 remove MonadWriter functions from Writer.CPS module 2021-01-20 05:41:01 +01:00
stefan-hoeck
b6e5ba0830 minor MonadWriter cleanup 2021-01-20 05:27:56 +01:00
stefan-hoeck
313f52a88a explicit lambdas for mapXYZ functions 2021-01-20 05:27:08 +01:00
stefan-hoeck
a42a34e9f0 removed trailing whitespace 2021-01-19 17:53:42 +01:00
stefan-hoeck
b5ab96477c some cleanups in State 2021-01-19 17:47:06 +01:00
stefan-hoeck
8c9e318a6d some cleanups in Reader 2021-01-19 17:43:47 +01:00
stefan-hoeck
7999420e88 made functions in EitherT and MaybeT public export 2021-01-19 17:38:59 +01:00
stefan-hoeck
c75d14fa8a implemented MonadWriter 2021-01-19 16:19:27 +01:00
stefan-hoeck
01ba3aa365 moved MonadState to its interface module 2021-01-19 15:45:19 +01:00
stefan-hoeck
dac566152b moved MonadReader to its interface module 2021-01-19 15:12:36 +01:00
stefan-hoeck
12f1ff493e added mapStateT function 2021-01-19 14:57:10 +01:00
stefan-hoeck
8eb0e855f1 removed RWST function reader 2021-01-19 14:41:26 +01:00
stefan-hoeck
8cb2220e58 implemented cps-style Writer 2021-01-19 14:34:15 +01:00
stefan-hoeck
b9f7683fbd mapRWST needs only a Functor 2021-01-19 14:11:06 +01:00
stefan-hoeck
b2e7384a80 implemented cps-style RWST 2021-01-19 13:58:18 +01:00
stefan-hoeck
81efdd7992 implementations for MonadError 2021-01-19 12:35:05 +01:00
stefan-hoeck
124afd89b1 moved transformer impls to their own directory 2021-01-19 11:53:23 +01:00
stefan-hoeck
b926e13b96 new transformer layout 2021-01-19 11:45:54 +01:00
Edwin Brady
c7783c553c Make the linter happier 2021-01-16 17:18:38 +00:00
Edwin Brady
6df2955a72
Merge pull request #909 from stefan-hoeck/maybeT
added MaybeT monad transformer to base
2021-01-16 15:43:14 +00:00
stefan-hoeck
7b73072554 fixed bug in Foldable of EitherT 2021-01-13 13:21:20 +01:00
Stefan Hoeck
77a911aa8a
Update libs/base/Control/Monad/Maybe.idr
Co-authored-by: G. Allais <guillaume.allais@ens-lyon.org>
2021-01-13 11:19:03 +01:00
stefan-hoeck
e52b658d78 no linearity annotation for MkMaybeT 2021-01-13 05:34:07 +01:00
Edwin Brady
d4abbfdae2 Add HasLinearIO
Ideally, liftIO would always be linear, but that has lots of knock-on
effects for other monads which we might want to put in HasIO, now that
subtyping is gone. We'll have to revisit this when we have some kind of
multiplicity polymorphism.
2021-01-11 11:24:43 +00:00
stefan-hoeck
31f50a793c added prelude function 'on' 2021-01-11 05:26:17 +01:00
stefan-hoeck
c1912cb212 Monad prerequisite for Semigroup instance 2021-01-11 05:05:33 +01:00
stefan-hoeck
e71c7b8946 added MaybeT monad transformer to base 2021-01-08 06:04:41 +01:00
Edwin Brady
ad632d825d Remove linearity subtyping
It's disappointing to have to do this, but I think necessary because
various issue reports have shown it to be unsound (at least as far as
inference goes) and, at the very least, confusing. This patch brings us
back to the basic rules of QTT.

On the one hand, this makes the 1 multiplicity less useful, because it
means we can't flag arguments as being used exactly once which would be
useful for optimisation purposes as well as precision in the type. On
the other hand, it removes some complexity (and a hack) from
unification, and has the advantage of being correct! Also, I still
consider the 1 multiplicity an experiment.

We can still do interesting things like protocol state tracking, which
is my primary motivation at least.

Ideally, if the 1 multiplicity is going to be more generall useful,
we'll need some kind of way of doing multiplicity polymorphism in the
future. I don't think subtyping is the way (I've pretty much always come
to regret adding some form of subtyping).

Fixes #73 (and maybe some others).
2020-12-27 19:58:35 +00:00
tensorknower69
aa940c3d18 change runState's signature 2020-12-17 10:10:18 +00:00
tensorknower69
c48b1e090e add execStateT and evalStateT 2020-12-17 10:10:18 +00:00
G. Allais
3f6b99e979
[ fix #657 ] RigCount for interface parameters (#808) 2020-12-11 11:58:26 +00:00
Dong Tsing-hsuen
88aa55e875
[ new ] null method in Foldable (#832)
Co-authored-by: Guillaume ALLAIS <guillaume.allais@ens-lyon.org>
2020-12-10 18:04:23 +00:00
MarcelineVQ
ea0df039fe change runReader's to take state first to allow easier use
following up on the change made in 5c76053cf3
to encourage people to do it in this manner going forward
2020-09-15 22:46:07 +01:00
MarcelineVQ
19bad79847 change runState's to take state first to allow easier use 2020-09-15 09:23:41 +01:00
MarcelineVQ
5c76053cf3 change StateT, swap result parameters
Nipping this historical artifact in the bud before it roots. It's often
useful to be able to `map` directly to the result of a StateT computation
and due to how Functor works this is made harder when the tuple is
(a,state) vs (state,a)
2020-09-15 09:23:41 +01:00