定义Torus类

时间:2012-05-29 08:52:50

标签: haskell

我想定义一个Torus类来表示在边界处环绕的2D数组。例如,访问索引超出相应维度大小的数组应该返回位置i mod arraysize的元素。因此,我的班级只需要定义一个get方法:

class Torus a where
    get :: a -> Int -> Int -> b

这个定义是不精确的。 a应该是一个2D数组,b应该是数组中包含的类型。我怎么能表达这个呢?

谢谢,

2 个答案:

答案 0 :(得分:8)

我想你只是在寻找班上的类型:

class Torus t where
    get :: t a -> Int -> Int -> a

或者您是否寻找合适的实例?

答案 1 :(得分:8)

您还可以使用功能依赖项或类型系列,以防您希望拥有比简单t :: * -> *类型更复杂的内容:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}

class Torus t v | t -> v where
    get :: t -> Int -> Int -> v

instance Torus (Vector a) a where
    get = ...

{-# LANGUAGE TypeFamilies #-}

class Torus t where
    type Element t
    get :: t -> Int -> Int -> Element t

instance Torus (Vector a) where
    type Element (Vector a) = a
    get = ...

这需要一些GHC扩展。