3
我是Purescript(以及Haskell)的新手,我被卡住了一個無法統一的錯誤。 起初我:Purescript - 不能統一類型
newtype Domain = Domain String
newtype Keyword = Keyword String
type Result = {
domain :: Domain,
occurred :: Boolean,
position :: Number,
quality :: Number
}
is_min_pos :: Maybe Result -> Maybe Result -> Maybe Result
is_min_pos Nothing Nothing = Nothing
is_min_pos Nothing y = y
is_min_pos x Nothing = x
is_min_pos x y = if y.position < x.position then y else x
這是給我的錯誤
Cannot unify type
Prim.Object
with type
Data.Maybe.Maybe
我以爲這是因爲它是希望x和y爲類型也許記錄。因此,爲了明確起見,我將代碼更改爲,按類型進行模式匹配。
data Result = Result {
domain :: Domain,
occurred :: Boolean,
position :: Number,
quality :: Number
}
is_min_pos (Result x) (Result y) = if y.position < x.position then y else x
現在我得到的錯誤
Cannot unify type
Data.Maybe.Maybe Processor.Result
with type
Processor.Result
這是指這部分
y.position < x.position -- in the first case
,並在第二種情況下
Result x -- on the pattern matching side
我工作的進一步
type Results = List Result
get_item_with_min_position :: Results -> Maybe Result
--get_item_with_min_position [] = Nothing
get_item_with_min_position results = foldl is_min_pos Nothing results
我使用「與foldl」從摺疊。我不知道如何模式匹配一個空列表。如果我可以,我會類型簽名更改爲
is_min_pos :: Maybe Result -> Result -> Maybe Result
我現在得到的錯誤
Cannot unify type
Prim.Object
with type
Data.Maybe.Maybe
這是可以理解的,因爲在
foldl is_min_pos Nothing results
結果的類型是List結果 is_min_pos的期望也許結果
什麼是一個乾淨的方法來解決這個問題?
謝謝你,菲爾,這工作。 – naruvimama