我試圖實現康托爾配對功能,爲 通用對類型類的實例,像這樣:添加類約束類型類實例
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
我怎麼能適當積分約束添加到實例? 我有一種模糊的感覺,我可能需要修改Pair接口本身,但不知道如何去解決這個問題。
嗯,在這個階段,我想我會一直使用積分,但是我認爲將這個約束添加到Pair是沒有意義的。 例如,另一實例可以IdentityPair一個可以添加諸如 數據= I AA 實例對IdentityPair其中 PI XY = I XY K(1×_)= X 升(I _ Y)= Y – guhou
啊,謝謝!我認爲我需要MultiParamTypeClasses,但無法讓我的小提琴工作。一定是因爲我沒有使用FlexibleInstances。 – guhou