-fsolve-constant-dicts is not very robust when dealing with GADTs
I expected -fsolve-constant-dicts
to nail #9701, it didn't fire at all but a slightly modified version does.
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeApplications #-}
module Foo where
data Silly a where
Silly :: Ord a => a -> Silly a
isItSilly :: a -> Silly a -> Bool
isItSilly a (Silly x) = a < x
isItSillyIntTA :: Int -> Silly Int -> Bool
isItSillyIntTA = isItSilly @Int
isItSillyInt :: Int -> Silly Int -> Bool
isItSillyInt a x = isItSilly a x
isItSillyInt2 :: Int -> Silly Int -> Bool
isItSillyInt2 a (Silly x) = a < x
isItSillyInt3 :: Int -> Silly Int -> Bool
isItSillyInt3 a (Silly x) = isItSilly a (Silly x)
Both versions 2 and 3 specialise nicely using the Int
Ord
dictionary. The first two versions don't. I'm unsure whether it *should* fire or not but I am making this ticket to record this fact.
Clonable code and core dump - https://gist.github.com/mpickering/f84a5f842861211e8e731c63e82d5c01
Trac metadata
Trac field | Value |
---|---|
Version | 8.2.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | dfeuer |
Operating system | |
Architecture |