我想定义一个Torus
表示在边界处环绕的二维数组的类。例如,使用超出相应维度大小的索引访问数组应返回 position 处的元素i mod arraysize
。因此,我的类应该只需要这样定义一个get
方法:
class Torus a where
get :: a -> Int -> Int -> b
这个定义是不精确的。a
应该是一个二维数组,并且b
应该是数组中包含的类型。我该如何表达?
谢谢,
我想定义一个Torus
表示在边界处环绕的二维数组的类。例如,使用超出相应维度大小的索引访问数组应返回 position 处的元素i mod arraysize
。因此,我的类应该只需要这样定义一个get
方法:
class Torus a where
get :: a -> Int -> Int -> b
这个定义是不精确的。a
应该是一个二维数组,并且b
应该是数组中包含的类型。我该如何表达?
谢谢,
我想你只是在寻找类中的类型:
class Torus t where
get :: t a -> Int -> Int -> a
或者您是否在寻找合适的实例?
如果您想要比简单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 扩展。