On Mar 8, 2008, at 22:06 , Thomas Hartman wrote:
A minor issue: I had a question if I could make the type signatures
for Enum instances less verbose by doing something like type
BoundedEnum = (Bounded a, Enum a) => a... I tried, and commented out
my attempt as it wouldn't type check. Guidance appreciated.
Nope. Uses of "type" declarations are self-contained; if you do
type BoundedEnum = (Bounded a, Enum a) => a
myFunc :: BoundedEnum -> BoundedEnum -> BoundedEnum
each instance of BoundedEnum in the declaration of BoundedEnum refers
to a distinct a. More technically, the declaration expands to:
myFunc :: (forall a. (Bounded a, Enum a) => a) ->
(forall a. (Bounded a, Enum a) => a) ->
(forall a. (Bounded a, Enum a) => a)
which is a rather useless declaration (I think the only inhabitant of
that type is _|_). And yes, this is annoying.
I think you might be able to do this as a typeclass instead, at the
expense of having to insert an instance declaration for each type.
(You will have to use an extension if you want to declare instances
for types such as Int. I think.)
class (Bounded a, Enum a) => BoundedEnum a where -- empty
instance BoundedEnum MyType a where
instance BoundedEnum Int where -- requires FlexibleInstances?
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon university KF8NH
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe