有必要学习haskell语言扩展以进行生产


10

Haskell核心语言非常简单。来自面向对象的背景,主要困难是适应纯功能范式。

在学习“基础” Haskell时,我一直将语言扩展视为CS人士的玩具或作为该语言的未来版本的实验(例如from future import ???python)。

但是,当我开始研究诸如Yesod之类的Web框架时,我发现许多源文件需要3到4个扩展名。有些看起来很简单(StringOverload)。其他的确实令人生畏(GADT,Type Famillies,Template Haskell)。他们的文档链接到研究论文,这对于那些希望“仅仅”学习一个新图书馆的人来说是很恐怖的。

是否有必要学习GHC语言扩展才能在Haskell中发挥作用?如果您要雇用Haskell开发人员进行生产应用程序,您会要求获得这些知识吗?


Answers:


7

是否有必要学习GHC语言扩展才能在Haskell中发挥作用?

是。对于任何语言/工具都是如此。凭借核心/基础知识,您可以解决在线竞赛问题,这可能是一个小型的大学项目,但绝对不是现实世界中的应用程序。

如果您要雇用Haskell开发人员进行生产应用程序,您会要求获得这些知识吗?

现在这取决于您是否有可以与您共享此知识的人。如果是,则此人可以增加新员工。如果不是,那么您必须首先让这种知识的人。同样,新技术也是如此。

当然,您也可以尝试在Haskell雇用具有如此深厚知识的人们。但是Haskell才刚刚进入行业,并且考虑到围绕它开展的商业项目很少,因此找到这样的人将很困难。在Haskell建立一支专业团队的有效方法是聘请了解基础知识并愿意在Haskell工作的人员,然后对其进行教育。


我本来是要抗议的,但后来我看到Real World Haskell教授许多语言扩展。谢谢您的回答。
西蒙·贝格

2
“而且对于任何语言/工具都是如此”-这是完全错误的。假设采用Java,C#,C ++之类的语言-它们都没有在现实世界的应用程序代码中常见的语言扩展。我认为,如果您每次都需要使用语言扩展,那么您需要编写比“在线竞赛问题解决方案”更简单的东西,那么我认为语言规范存在一些问题。
马尔科姆

@Malcolm为什么会发现“在我看来,如果每次必须编写比“在线竞赛问题解决方案”更简单的内容时,我认为语言规范就有很大问题。” 是真实的?扩展使其否定的特征是什么?我使用ghc和提供的扩展名。向现有项目添加扩展似乎与添加另一个库一样繁重。
Davorak

2
@Davorak因为我们有成千上万种不同的扩展组合,而不是一种语言,而且您对代码是否要在某个编译器上编译一无所知。扩展使代码不可移植。而且这也使该语言难以学习,因为除了每个人都使用的单一功能集之外,还有大量的附加功能,而且您不知道必须了解和使用哪些功能以及仅存在哪些功能的线索。因为研究人员很开心。
马尔科姆

2
@Davorak这正是我在谈论的问题:每个人都使用GHC,因为这是唯一仍在积极维护的编译器。其他编译器无法跟上,因此没有人可以使用它们,也没有理由去投资它们。至于库:您选择问题库并仅使用它们。假设,如果您需要读取XML,则只需要一个XML读取库。但是,有了扩展,何时需要它就并不明显。虽然库也有问题。说,在Java中只有数组和集合,而在Haskell中则有大量的数组库。
马尔科姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.