我在unm-hip包中找到了这段代码.那么Pixel是一个功能?
class Imageable i where
type Pixel i :: *
rows :: i -> Int
cols :: i -> Int
ref :: i -> Int -> Int -> (Pixel i)
makeImage :: Int -> Int -> PixelOp (Pixel i) -> i
pixelList :: i -> [Pixel i]
pixelList i = [ ref i r c | r <- [0..(rows i - 1)], c <- [0..(cols i - 1)]]
Run Code Online (Sandbox Code Playgroud)
Seb*_*edl 15
作为标准Haskell的扩展,您可以处理"种类".对于类型和类型构造函数,种类是一种非常基本的类型系统.种类*很简单,就像Int.Kind * -> *是一个类型构造函数,它接受一个类型并产生一个类型,例如Maybe:传递类似Int参数的类型,然后获得类型Maybe Int.
此代码中使用的另一个扩展(我最初没有注意到,因为缩进丢失)是相关类型.标准Haskell中的类型类可以指定类型必须支持的许多函数.对于关联类型,它还可以指定与类型关联的类型和类型构造函数.
这里,这意味着i作为实例Imageable(即行为像图像)的类型必须具有关联的像素类型Pixel i,并且这必须是简单类型(种类*),而不是类型构造函数.
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |