我創建了一個新的資料型別Board:
data Board a = Grid [(Position, Maybe a)]
deriving (Eq, Show)
Position它自己的資料型別在哪里:
data Position = NW | N | NE | W | M | E | SW | S | SE
deriving (Eq, Ord, Show)
現在我正在嘗試創建一個函式label,它接受一個PositionandBoard并回傳給定位置(使用 包裝Just)或Nothing給定位置為空的標簽。
我正在考慮實作一個新功能搜索來做到這一點。
search :: (Eq a) => a -> [(a,b)] -> Maybe b
search _ [] = Nothing
search x ((a,b):xs) = if x == a then Just b else search x xs
但我不知道如何[(a,b)]從我的Board輸入中傳入 List 。我試過:
label :: Position -> Board a -> Maybe a
label p b = Search p b
并得到錯誤:
* Couldn't match expected type: [(Position, a)]
with actual type: Board a
* In the second argument of `lookup', namely `b'
In the expression: lookup p b
In an equation for `label': label p b = lookup p b
* Relevant bindings include
b :: Board a (bound at A6.hs:21:9)
label :: Position -> Board a -> Maybe a (bound at A6.hs:21:1)
也許有更簡單的方法來解決這個問題,但這是我能想到的唯一方法。
(Aplet123指出了一個錯誤,因為更新和更新產生了錯誤)
uj5u.com熱心網友回復:
您需要仔細查看您的資料型別以找到那里的實際資料,
label :: Position -> Board a -> Maybe a
label p (Grid b) = search p b
-- ^^^^
Haskell 中的函式名稱不能大寫。這是為型別和資料建構式保留的。
以上會給你另一個型別錯誤,但我相信你可以調整它以修復它。對于初學者,輸入不帶型別簽名的定義,以查看為其推斷的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/366337.html
標籤:哈斯克尔
上一篇:交換元組串列中的兩個元素
