instances for closed type families
Simon Peyton Jones
simonpj at microsoft.com
Wed May 25 18:03:49 UTC 2016
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/d675e551/attachment.html>
More information about the ghc-devs
mailing list