
I had one thought though: consider an abstract data type with functions that operates over it. I might want to require e.g Ord in the definition of a function so I have freedom to change my implementation later, even though the current implementation doesn't need Ord. Think of it as separating specification and implementation. An example is 'nub'. I initially might implement it as a O(n^2) algorithm using only Eq, but I might want to leave the door open to using Ord to create something better, without later having to break backwards compatibility.
Yes, a per-function way to suppress the warning might be useful. But I have not implemented that. At the moment it’s just per-module.
Simon
From: Johan Tibell [mailto:johan.tibell@gmail.com]
Sent: 07 January 2015 15:27
To: Simon Peyton Jones
Cc: ghc-devs@haskell.org; Bill Mitchell (Bill.Mitchell@hq.bcs.org.uk); Milan Straka; Ross Paterson
Subject: Re: Redundant constraints
I think this probably makes sense, especially since you can silence the warning when you intend to add an unnecessary constraint.
I had one thought though: consider an abstract data type with functions that operates over it. I might want to require e.g Ord in the definition of a function so I have freedom to change my implementation later, even though the current implementation doesn't need Ord. Think of it as separating specification and implementation. An example is 'nub'. I initially might implement it as a O(n^2) algorithm using only Eq, but I might want to leave the door open to using Ord to create something better, without later having to break backwards compatibility.
On Wed, Jan 7, 2015 at 4:19 PM, Simon Peyton Jones