Opened 2 years ago

Closed 2 years ago

#14058 closed feature request (fixed)

Cannot bundle pattern synonym with exported data family

Reported by: RyanGlScott Owned by:
Priority: normal Milestone: 8.4.1
Component: Compiler Version: 8.2.1
Keywords: PatternSynonyms Cc: mpickering
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case: patsyn/should_compile/T14058
Blocked By: Blocking:
Related Tickets: Differential Rev(s): Phab:D3808
Wiki Page:


I'd like to write this code:

{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE TypeOperators #-}
module Foo (Sing(.., SCons)) where

data family Sing (a :: k)

data instance Sing (z :: [a]) where
  SNil :: Sing '[]
  (:%) :: Sing x -> Sing xs -> Sing (x:xs)

pattern SCons :: forall a (z :: [a]). ()
              => forall (x :: a) (xs :: [a]). z ~ (x:xs)
              => Sing x -> Sing xs -> Sing z
pattern SCons x xs = (:%) x xs
{-# COMPLETE SNil, SCons #-}

But alas, GHC will not let me:

$ ghci Bug.hs
GHCi, version 8.2.1:  :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
[1 of 1] Compiling Foo              ( Bug.hs, interpreted )

Bug.hs:7:13: error:
    • Pattern synonyms can be bundled only with datatypes.
    • In the pattern synonym: SCons
      In the export: Sing(.., SCons)
7 | module Foo (Sing(.., SCons)) where
  |             ^^^^^^^^^^^^^^^
Failed, 0 modules loaded.

Can this restriction be lifted for data families?

Change History (3)

comment:1 Changed 2 years ago by RyanGlScott

Differential Rev(s): Phab:D3808
Status: newpatch

I think this turns out to be a surprisingly simple fix.

comment:2 Changed 2 years ago by Ben Gamari <ben@…>

In 29f07b1d/ghc:

Allow bundling pattern synonyms with exported data families

Test Plan: make test TEST=T14058

Reviewers: mpickering, austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie

GHC Trac Issues: #14058

Differential Revision:

comment:3 Changed 2 years ago by RyanGlScott

Milestone: 8.4.1
Resolution: fixed
Status: patchclosed
Test Case: patsyn/should_compile/T14058
Note: See TracTickets for help on using tickets.