定义Torus类

Gui*_*rel 2 haskell

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

class Torus a where
    get :: a -> Int -> Int -> b
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

phi*_*ler 8

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

class Torus t where
    get :: t a -> Int -> Int -> a
Run Code Online (Sandbox Code Playgroud)

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


Vla*_*eev 8

您还可以使用函数依赖项或类型系列,以防您想要比简单t :: * -> *类型更复杂的东西:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}

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

instance Torus (Vector a) a where
    get = ...
Run Code Online (Sandbox Code Playgroud)

要么

{-# 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 = ...
Run Code Online (Sandbox Code Playgroud)

这需要一些GHC扩展.