[英]Haskell: Usage of flip results in error: Equations for ‘.>’ have different numbers of arguments
我正在努力理解這里發生了什么。 我想實現一個數據類型Direction
並為其定義一個交換運算符.>
。 到目前為止,我有這個:
data Direction = N | E | S | W | None
(.>) :: Direction -> Direction -> [Direction]
N .> S = [None]
W .> E = [None]
(.>) = flip (.>)
我收到錯誤Equations for '.>' have different numbers of arguments
。 這就是我不明白的,因為在 ghci 中檢查時,等式的兩邊都有相同數量的參數:
λ> :t (.>)
(.>) :: Direction -> Direction -> [Direction]
λ> :t flip (.>)
flip (.>) :: Direction -> Direction -> [Direction]
我可以通過編寫d1 .> d2 = d2 .> d1
而不是使用flip
來解決錯誤,但我不明白為什么 flip 不起作用。 有任何想法嗎?
編輯:刪除第二個不相關的問題
Haskell 要求函數的每個方程在左側具有相同數量的顯式參數。 這是不允許的:
N .> S = ... -- two arguments
W .> E = ... -- two arguments
(.>) = ... -- no arguments
即使最后一行在道德上是正確的,因為...
部分的類型有兩個參數,Haskell 不允許這樣做,因為參數沒有明確出現在左側。 因此,我們需要使用類似的方法使參數明確
x .> y = ... x y -- two arguments
那是:
x .> y = flip (.>) x y
可以簡化為
x .> y = y .> x
這就是您在問題中所寫的內容。
如果您想知道為什么不允許這樣做, 那么有一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.