我的Haskell有另一個問題。我給從問題如下數據構造,什麼是Haskell不開心?這是抱怨我的類型簽名
type Point = (Int, Int)
data Points = Lines Int Int
| Columns Int Int
| Union Points Points
| Intersection Points Points
這是關於點上開始(0,0)的網格和(X,Y)滿足x爲從源頭上水平距離和Y作爲與原點的垂直距離。
我試着從中定義一個函數「Lines」,給定Lines x y將計算網格上垂直距離x〜y的所有點。 例如
> Lines 2 4
(0,2)(1,2)(2,2)(3,2)....
(0,3)(1,3)(2,3)(3,3)....
(0,4)(1,4)(2,4)(3,4)....
等等。那麼我做的,是,
Lines :: Int -> Int -> Points
Lines lo hi = [ (_, y) | lo <= y && y <= hi ]
但Haskell抱怨說,
無效的類型簽名Lines :: Int - > Int - > Points。
應爲以下格式:
這是什麼意思? 「點」已經在上面定義了......當然「Int」「Points」被認爲是「類型」?我沒有看到問題,爲什麼Haskell感到困惑?
x值來自'lines'的位置?你想構建一個無限列表的列表嗎?然後嘗試'線'lo hi = map(\ y - > map(\ x - >(x,y))[0 ..])[lo..hi]'。請注意,已經有一個名爲'lines'的函數。 –