相关疑难解决方法(0)

Template Haskell有什么不好的?

似乎模板Haskell经常被Haskell社区视为一种​​不幸的便利.我很难准确地说出我在这方面所观察到的内容,但请考虑这几个例子

我已经看过各种博客文章,其中人们使用模板Haskell做了相当简洁的东西,实现了更好的语法,这在常规的Haskell中是不可能的,以及巨大的样板减少.那么为什么模板Haskell以这种方式受到鄙视呢?是什么让它不受欢迎?在什么情况下应避免模板Haskell,为什么?

haskell template-haskell

249
推荐指数
6
解决办法
2万
查看次数

我应该使用GHC Haskell扩展吗?

在我学习Haskell时,我发现在现实代码中使用了很多语言扩展.作为初学者,我应该学会使用它们,还是应该不惜一切代价避免使用它们?我看到它破坏了与Haskell 98的兼容性,并且仅将代码限制为几乎GHC.但是,如果我在Hackage上浏览软件包,我发现大多数软件包都是GHC的.

那么,社区对使用语言扩展的态度是什么?

如果扩展的使用是可以的,我如何区分我可以"安全地"使用的扩展(那些可能成为下一个Haskell标准的一部分的扩展)与那些主要是"实验性"的扩展?例如,我认为-XDisambiguateRecordFields很好用,但未来很可能会得到支持吗?

haskell ghc

78
推荐指数
4
解决办法
5707
查看次数

是否有一个被认为是"安全"的GHC扩展名单?

有时,如果没有至少一种语言扩展,我想写的一段代码是不合法的.当试图在研究论文中实现这些想法时尤其如此,这些论文倾向于使用在撰写论文时可用的任何spiffy,超扩展版本的GHC,而没有明确实际需要哪些扩展.

结果是我经常在我的.hs文件的顶部找到这样的东西:

{-# LANGUAGE TypeFamilies
           , MultiParamTypeClasses
           , FunctionalDependencies
           , FlexibleContexts
           , FlexibleInstances
           , UndecidableInstances
           , OverlappingInstances #-}
Run Code Online (Sandbox Code Playgroud)

我不介意,但我常常觉得我正在做出盲目的牺牲来安抚GHC的大神.它抱怨如果没有语言扩展X,某段代码无效,所以我为X添加了一个pragma.然后它要求我启用Y,所以我为Y添加了一个pragma.到这个结束时,我已经启用我不太了解的三个或四个语言扩展,我不知道哪些是"安全的".

用"安全"来解释我的意思:

  • 我明白这UndecidableInstances是安全的,因为虽然它可能导致编译器不终止,只要代码编译它就不会有意想不到的副作用.

  • 另一方面,OverlappingInstances显然是不安全的,因为它使我很容易意外地编写产生运行时错误的代码.

所以我的问题是:

是否有GHCextensions列表被认为是"安全的"并且"不安全"?

haskell ghc

36
推荐指数
1
解决办法
2097
查看次数

需要灵活的实例?

我想将Haskell类型的Convertible实例写入其C表示

它看起来像这样:

instance Convertible Variable (IO (Ptr ())) where
Run Code Online (Sandbox Code Playgroud)

现在GHC抱怨:

 Illegal instance declaration for `Convertible
                                    Variable (IO (Ptr ()))'
  (All instance types must be of the form (T a1 ... an)
   where a1 ... an are *distinct type variables*,
   and each type variable appears at most once in the instance head.
   Use -XFlexibleInstances if you want to disable this.)
In the instance declaration for `Convertible Variable (IO (Ptr ()))'
Run Code Online (Sandbox Code Playgroud)

如果你的实例声明中有自由类型,我认为需要灵活实例,但事实并非如此.我可以在添加正确的pragma时进行编译,但有人可以解释为什么我需要这个吗?

haskell typeclass

7
推荐指数
2
解决办法
4164
查看次数

我应该首先尝试学习哪种GHC类型的系统扩展?

GHC有一个类型系统扩展的整个动物园:多参数类型类,功能依赖,秩n多态,存在类型,GADT,类型族,范围类型变量等等.哪些可能是最容易学习的?另外,这些功能是否以某种方式组合在一起,或者它们是否完全相同,可用于完全不同的目的?

haskell types ghc

6
推荐指数
1
解决办法
314
查看次数

标签 统计

haskell ×5

ghc ×3

template-haskell ×1

typeclass ×1

types ×1