如何在F#中解决这个不正确的类型返回

时间:2018-04-23 13:35:42

标签: f#

我有一个以:

开头的函数
type Coordinate = (int * int)
type ColourList = byte list
type Block = Coordinate * ColourList

makeBlock(image:image) (coord:Coordinate) : Block =
    Block(coord,getColourList(image(coord))`

CreateUnit (image:Image) : (Coordinate -> Block) =
    fun coord -> makeBlock(image, coord)` 

getColourList在图片的坐标中获取RGB byteList。它的签名是

image:Image -> x:int * y:int -> byte list

我们知道图像也是一种类型,我的问题是getColourList(image(coord))的返回类型是int * int -> byte list这是一个不正确的表达式。任何人都可以帮忙吗?

感谢您的回答

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,我想你要问的是如何定义CreateUnit返回的函数。这取决于你如何从图像和坐标制作块。假设它是图像的成员函数:

let CreateUnit image : (Coordinate->Block) =
    fun (coordinate:Coordinate) -> image.makeBlock(coordinate)

这将为您提供一个绑定到坐标并生成块的图像的函数:

let myImage = loadImage(filename)
let blockMaker = CreateUnit image

myCoordinates
|> Seq.map blockMaker

将坐标序列转换为从图像派生的块序列。