Ticket #3638 (closed bug: fixed)

Opened 4 years ago

Last modified 3 years ago

Redundant signature required with RULES and GADTs

Reported by: rl Owned by:
Priority: normal Milestone: 7.0.1
Component: Compiler (Type checker) Version: 6.13
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Difficulty: Unknown
Test Case: gadt/T3638 Blocked By:
Blocking: Related Tickets:

Description

Here is a small program:

data T a where TInt :: T Int

foo :: T Int -> Int
foo TInt = 0

{-# RULES "foo"  forall x. foo x = case x of { TInt -> 0 } #-}

GHC complains:

    GADT pattern match with non-rigid result type `t'
      Solution: add a type signature for the entire case expression
    In a case alternative: TInt -> 0
    In the expression: case x of { TInt -> 0 }
    When checking the transformation rule "foo"

And indeed, changing the rule to

{-# RULES "foo"  forall x. foo x = case x of { TInt -> 0 } :: Int #-}

works. The signature is redundant, though, because the type of the case is determined by the type of the rule head.

Change History

Changed 4 years ago by simonpj

  • difficulty set to Unknown

Ha, well at least the error message was on target.

This'll be fixed when we switch to the  OutsideIn algorithm for inference.

Simon

Changed 4 years ago by igloo

  • failure set to None/Unknown
  • milestone set to 6.14.1

Changed 3 years ago by simonpj

  • status changed from new to closed
  • testcase set to gadt/T3638
  • resolution set to fixed

Indeed it is fixed. Regression test added

Simon

Note: See TracTickets for help on using tickets.