Type families and classes

Alan & Kim Zimmerman alan.zimm at gmail.com
Thu May 18 07:04:58 UTC 2017

Hi all

I am experimenting with Trees that Grow [1] in the context of the GHC HsSyn
AST, and wanting to express that a given extension point needs to have
certain properties.

The specific case is to be able to contain a SourceText, in the context of

So I have (stripped down)

data GHCX

type family XHsString x

type instance XHsString GHCX = SourceText

class HasSourceText a where
  -- Provide setters to mimic existing constructors
  noSourceText  :: a
  sourceText    :: String -> a

  getSourceText :: a -> SourceText

instance HasSourceText (XHsString GHCX) where
  noSourceText    = NoSourceText
  sourceText s    = SourceText s
     getSourceText a = a

But this gives an error

compiler/hsSyn/HsExtension.hs:80:10: error:
    • Illegal type synonym family application in instance:
        XHsString GHCX
    • In the instance declaration for ‘HasSourceText (XHsString GHCX)’

Is there some way to achieve this, or is it simply impossible?

The full work-in-progress source is here[2]


[1] https://arxiv.org/abs/1610.04799
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20170518/55b98568/attachment.html>

More information about the ghc-devs mailing list