2017-01-24 45 views
2

據我所知,一元減號是Haskell中唯一的一元運算符,它必然是Numnegate?有沒有辦法將一元減號重新綁定到不同類型類型的negate有沒有辦法將一元減號(否定)重新綁定到與Num不同的類型類型?

+0

您可以避免前奏('-XNoImplicitPrelude'),然後根據需要定義它。問題是,大多數庫隱含依賴前奏,所以它會很孤獨 – hao

+0

我試圖在導入時隱藏否定,它不起作用。 –

+0

哦,等等,我忘了。不理我! – hao

回答

4

嘗試the RebindableSyntax extension。它允許一元減去引用範圍內的任何「否定」。作爲docs say

  • 否定(例如「 - (F X)」)是指「否定(F x)的」,無論是在數字模式和表達式。

編譯器有這個約定硬編碼的,但只要能說服否則你

  • 打開RebindableSyntax,其中隱含開啓NoImplicitPrelude;
  • 當您導入Prelude時隱藏默認的negate;和
  • 在範圍內定義自己的negate
+0

看來我必須定義一堆除了否定之外的東西。我還需要定義ifThenElse(使用模式匹配)並從fromString導入,但現在它可以工作。謝謝。 ......實際上,如果我們使用全球標準,而不是使用全球標準,現在我發現我可以將它作爲我的DSL的類別定義的一部分。這很整齊。 –

+1

重新綁定語法是一個令人震驚的好主意! – hao

相關問題