[Haskell-cafe] Partially applied type synonyms
Ttt Mmm
amindfv at mailbox.org
Fri Oct 8 07:05:21 UTC 2021
> On 10/08/2021 5:33 AM Anthony Clayden <anthony.d.clayden at gmail.com> wrote:
>
>
>
> > I was surprised to find the below code doesn't typecheck even with -XLiberalTypeSynonyms. Am I missing something or is this really not possible?
>
>
> Reading the error message would help:
>
> * The type synonym `Foo' should have 2 arguments, but has been given 1
>
I'm not sure what in my question made it seem like I hadn't read this error message. With my code as written I can't apply both arguments, and I'm trying to solve the problem in front of me given that fact.
> -XLiberalTypeSynonyms relaxes the 'saturated application' rule a little https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/liberal_type_synonyms.html?highlight=type%20synonym#liberalised-type-synonyms
>
> "You can apply a type synonym to a partially applied type synonym:"
>
> But that isn't what you're doing. The docs say that still
>
> " ... malformedness ... * Partially-applied type synonym."
>
> Type Synonyms are not functions. Think of them as 'macro' expansions.
>
Interestingly I get an almost identical error when defining Foo as a type family, which seems a lot more akin to a function.
> Possibly your `Bar` could be a type synonym, taking `(Foo Maybe)` as an argument in the `instance Eq`.
>
Thank you for this concrete suggestion. I'd actually tried variations on this before asking on the list, and I've tried a few more just now, but I'm very willing to believe I'm simply not looking in the right place. Certainly a simple `type Bar' x = Bar x` isn't changing anything.
> What type is it exactly that you want to derive an instance for?
>
Other than excluding unnecessary details, I've provided code that's pretty similar to the real code I'm working on. The biggest difference is that `Bar` is actually defined more like:
data Bar (m :: * -> *) = Bar { a :: m Int, b :: m Bool, c :: m Double }
So it really does need to take a `* -> *` type
Thanks,
Tom
> _______________________________________________Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20211008/595a8483/attachment.html>
More information about the Haskell-Cafe
mailing list