簡體   English   中英

Haskell:使用翻轉會導致錯誤:'.>' 的方程具有不同數量的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM