2014-04-17 93 views
7

好的,這是一個愚蠢的問題。我已經定義了一個新的#運算符,並且我正試圖弄清楚固定聲明應該是什麼。固定的樂趣

  1. 我想#++後應用。那麼這是否意味着優先級應該是更高更低++? (++優先5.)

  2. 該類型是(#) :: Foo -> Bar -> Foo。我想要左結合還是右結合?因爲在我看來,其中一個將使x # y # z型檢查,而另一個不會。

我知道這可能看起來微不足道,但我總是總是似乎得到這個錯誤...

回答

9
  1. $具有最低優先級(0)和$始終應用「最後「所以你想要#優先級低於++。此外,您可以比較*+的優先順序。

  2. 左結合意味着x # y # z = (x # y) # z(這是左摺疊如何操作)。 x # (y # z)不會鍵入檢查,但(x # y) # z會,所以你想它是聯想。

+0

關於'+'和'*'的好處。哦,而且我總是以錯誤的方式摺疊!我希望他們能夠將他們命名爲「嚴格摺疊」和「懶惰摺疊」或其他什麼...... – MathematicalOrchid

+0

@數學羅蘭,我通常記得的方式是'foldr'是正確的聯想,這與'非嚴格'聯繫在一起。然後'foldl'是一個更嚴格的版本,'foldl'是後者真正嚴格的版本。 – eazar001