unexpected difference between newtype and data
The following code compiles fine
-- | A referable class
-- An object can only have one reference.
-- For example, a function is either referenced by name of by signature but not both.
class ( Eq (Ref a)
, Ord (Ref a)
, Hashable (Ref a)
, Show (Ref a)
, Read (Ref a)
, Data (Ref a)
) => Referable a where
type Ref a
toRef :: a -> Ref a
data Referable a =>
RefMap a = RefMap { -- | the HashMap
toHashMap :: HashMap.Map (Ref a) a
} deriving (Eq, Ord, Show, Read, Data)
yet following the hlint hint to replace data by the equivalent newtype results in the following issues:
src\TorXakis\Referable.hs:59:43: error:
* Could not deduce (Eq (Ref a))
arising from the 'deriving' clause of a data type declaration
from the context: Eq a
bound by the deriving clause for `Eq (RefMap a)'
at src\TorXakis\Referable.hs:59:43-44
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
* When deriving the instance for (Eq (RefMap a))
|
59 | } deriving (Eq, Ord, Show, Read, Data)
| ^^
src\TorXakis\Referable.hs:59:47: error:
* Could not deduce (Ord (Ref a))
arising from the 'deriving' clause of a data type declaration
from the context: Ord a
bound by the deriving clause for `Ord (RefMap a)'
at src\TorXakis\Referable.hs:59:47-49
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
* When deriving the instance for (Ord (RefMap a))
|
59 | } deriving (Eq, Ord, Show, Read, Data)
I assume this is a bug...
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.2.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |