instances for closed type families
Alan & Kim Zimmerman
alan.zimm at gmail.com
Wed May 25 18:25:13 UTC 2016
There is an example at http://lpaste.net/164532 (attached as well)
The derived Data instance fails with
/home/alanz/Example.hs:19:19:
Illegal type synonym family application in instance:
NameOrRdrName id
In the stand-alone deriving instance for ‘Data (NameOrRdrName id)’
And how would an instance for Outputable be defined in terms of the
existing ones?
Alan
On Wed, May 25, 2016 at 8:03 PM, Simon Peyton Jones <simonpj at microsoft.com>
wrote:
> Can you give a small example? Certainly any instance like
>
> instance Data x => Data (F x)
>
> is not allowed, of course, if F is a type function. It’s like not allowing
>
>
>
> f (g x) = x
>
>
>
> in the term language. Only constructors in patterns!
>
>
> S
>
>
>
> *From:* ghc-devs [mailto:ghc-devs-bounces at haskell.org] *On Behalf Of *Alan
> & Kim Zimmerman
> *Sent:* 25 May 2016 18:39
> *To:* ghc-devs at haskell.org
> *Subject:* instances for closed type families
>
>
>
> I am working on https://ghc.haskell.org/trac/ghc/ticket/12105, and have a
> type to ensure that the `HsMatchContext` has either a `RdrName` or a
> `Name`, not an `Id`.
>
> type family NameOrRdrName id where
> NameOrRdrName Id = Name
> NameOrRdrName Name = Name
> NameOrRdrName RdrName = RdrName
>
> Is there any way to declare `Data` and `OutputableBndr` instances for this?
>
> Without it I am having to do something like
>
> instance (OutputableBndr name, OutputableBndr (NameOrRdrName name))
> => Outputable (HsDecl name) where
>
> which requires UndecidableInstances.
>
> I get
>
> compiler/hsSyn/PlaceHolder.hs:114:19:
> Illegal type synonym family application in instance:
> NameOrRdrName id
> In the stand-alone deriving instance for ‘Data (NameOrRdrName id)’
>
> for the parameterised version and
>
> compiler/hsSyn/PlaceHolder.hs:115:19:
> Illegal type synonym family application in instance:
> NameOrRdrName RdrName
> In the stand-alone deriving instance for
> ‘Data (NameOrRdrName RdrName)’
>
> for the one specific to `RdrName`.
>
> Regards
>
> Alan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20160525/3f05f826/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Example.hs
Type: text/x-haskell
Size: 733 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20160525/3f05f826/attachment-0001.hs>
More information about the ghc-devs
mailing list