2017-01-24 20 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

相关问题