Adding class constraints to typeclass instance
Posted
by
BleuM937
on Stack Overflow
See other posts from Stack Overflow
or by BleuM937
Published on 2012-09-13T00:14:32Z
Indexed on
2012/09/13
3:39 UTC
Read the original article
Hit count: 211
I'm trying to implement the Cantor Pairing Function, as an instance of a generic Pair typeclass, as so:
module Pair (Pair, CantorPair) where
-- Pair interface
class Pair p where
pi :: a -> a -> p a
k :: p a -> a
l :: p a -> a
-- Wrapper for typing
newtype CantorPair a = P { unP :: a }
-- Assume two functions with signatures:
cantorPair :: Integral a => a -> a -> CantorPair a
cantorUnpair :: Integral a => CantorPair a -> (a, a)
-- I need to somehow add an Integral a constraint to this instance,
-- but I can't work out how to do it.
instance Pair CantorPair where
pi = cantorPair
k = fst . cantorUnpair
l = snd . cantorUnpair
How can I add the appropriate Integral constraint to the instance? I have a vague feeling I might need to modify the Pair interface itself, but not sure how to go about this.
© Stack Overflow or respective owner