[Haskell-cafe] Selda: confused about type signtures
Marc Busqué
marc at lamarciana.com
Mon Apr 23 14:54:36 UTC 2018
On Mon, 23 Apr 2018, Tom Ellis wrote:
> I had an error in what I said and also it was imprecise. It's
> `Res (Cols s a)` which is `a`, but only in the cases where you're actually
> going to use it, and the compiler cannot take that into account when
> solving the constraint. Anyway, as Li-yao Xia points out in a sibling
> message, the type variable `s` in not constrained and therefore it seems
> impossible to solve.
Thanks Tom for your reply.
In this case the error is:
```
• Couldn't match type ‘a’ with ‘Res (Cols s0 a)’
‘a’ is a rigid type variable bound by
the type signature for:
list :: forall s a.
(Result (Cols s a), Columns (Cols s a)) =>
Table a -> IO [a]
at src/Hedger/Backend.hs:24:1-69
Expected type: selda-0.1.12.1:Database.Selda.Backend.Internal.SeldaM
[a]
Actual type: selda-0.1.12.1:Database.Selda.Backend.Internal.SeldaT
IO [Res (Cols s0 a)]
• In the second argument of ‘($)’, namely ‘query (select table)’
In the expression: withDB $ query (select table)
In an equation for ‘list’:
list table = withDB $ query (select table)
• Relevant bindings include
table :: Table a (bound at src/Hedger/Backend.hs:25:6)
list :: Table a -> IO [a] (bound at src/Hedger/Backend.hs:25:1)
|
25 | list table = withDB $ query (select table)
```
> Thanks, but could you send a full working version that includes a definition
> of `list`? I can't replicate what you've done on my end.
I have pushed the repo to Github:
https://github.com/waiting-for-dev/hedger
Important code is in `src/Hedger/` directory.
`Backend.hs` is where `list` is defined. Right now it has its type
signature commented out so that it compiles thanks to
`AllowAmbiguosTypes` and `FlexibleContexts`.
`Category.hs` has the function `listCategories` which uses `list`.
Anyway, from `ghci` one can just call `list categories` or `list
expenses`. There is also a helper function `addCategory` to add a
category record just providing its name (from `ghci`,
`OverloadedStrings` must be loaded).
In `Migration.hs` is where `categories` and `expenses` tables are
created.
Marc Busqué
http://waiting-for-dev.github.io/about/
More information about the Haskell-Cafe
mailing list