小编Don*_*art的帖子

我的Haskell程序或库如何找到它的版本号?

我希望我的cabalised程序有一个--version开关.

我希望它报告与.cabal文件中存在的版本相同的版本.

如果我必须在我的Haskell源代码和.cabal文件中单独更新版本号,我最终会使它们不同步.

那么,我的程序如何在cabal下编译,从.cabal文件中获取其版本号?

haskell version package cabal

61
推荐指数
1
解决办法
3229
查看次数

Pattern Matching和Guards有什么区别?

我对Haskell和一般的函数式编程都很陌生.我的问题非常基本.Pattern Matching和Guards有什么区别?

使用模式匹配的功能

check :: [a] -> String
check [] = "Empty"
check (x:xs) = "Contains Elements"
Run Code Online (Sandbox Code Playgroud)

使用警卫的功能

check_ :: [a] -> String
check_ lst
    | length lst < 1 = "Empty"
    | otherwise = "Contains elements"
Run Code Online (Sandbox Code Playgroud)

对我来说,模式匹配和防护看起来基本相同.两者都评估条件,如果为true则将执行挂钩的表达式.我的理解是正确的吗?

在这个例子中,我可以使用模式匹配或防护来获得相同的结果.但是有些东西告诉我,我错过了一些重要的事情.我们可以一直替换另一个吗?

有人可以提供一些例子,其中模式匹配比警卫更受欢迎,反之亦然吗?

syntax haskell guard

61
推荐指数
4
解决办法
1万
查看次数

使用哪个Haskell XML库?

我看到Haskell中有一些XML处理库.

  • HaXml似乎是最受欢迎的(根据dons)
  • HXT似乎是最先进的(但由于箭头也是最难学的)
  • xml似乎只是基本的解析器
  • HXML似乎被抛弃了
  • tagsoup和tagchup
  • libXML和libXML SAX绑定

那么,如果我想要它,可以选择哪个库

  • 功能相当强大(从XML中提取数据并修改XML)
  • 可能会在未来的很长一段时间内得到支持
  • 成为"社区选择"(默认选择)

虽然上面的大部分内容似乎足以满足我目前的需求,但是选择其中一个而不是其他需求的原因是什么?

UPD 20091222:

关于许可证的一些注意

xml comparison haskell

60
推荐指数
3
解决办法
1万
查看次数

向Haskell添加ML样式模块有哪些主要的理论困难?

众所周知,Haskell风格的类型类和ML风格的模块提供了不同的指定接口的机制.它们(可能)具有相同的功率,但实际上每种都有其自身的优点和缺点.

由于我在语言功能方面有点像包容性,我的问题是:在Haskell中添加ML样式模块有哪些主要的理论上的困难?我对以下几行的答案感兴趣:

  • 现有的类型系统功能与ML型模块的交互性很差?(不良交互的一个例子是GADT和功能依赖,即使fundeps在技术上等同于相关类型!)

  • 为了编译ML样式的模块,必须在编译器端放弃什么?

  • ML样式模块如何与类型推断交互?

相关阅读:

ocaml haskell type-systems ml sml

60
推荐指数
3
解决办法
2826
查看次数

Haskell的代数数据类型

我正在努力完全理解Haskell的所有概念.

代数数据类型在哪些方面类似于泛型类型,例如在C#和Java中?它们有何不同?无论如何,他们有什么代数呢?

我熟悉通用代数及其环和字段,但我对Haskell的类型如何工作只有一个模糊的概念.

haskell types functional-programming algebraic-data-types data-structures

58
推荐指数
5
解决办法
2万
查看次数

Haskell轻量级线程开销并用于多核

我一直在阅读"真实世界Haskell"一书,关于并发和并行的章节.我的问题如下:

  • 由于Haskell线程实际上只是一个"真正的"OS线程中的多个"虚拟"线程,这是否意味着创建它们(如1000)不会对性能产生重大影响?即,我们可以说创建Haskell线程所产生的开销forkIO几乎可以忽略不计吗?如果可能的话,请带上典型的例子.

  • 轻量级线程的概念是否阻止我们使用多核架构的好处?据我所知,两个Haskell线程不可能在两个独立的内核上并发执行,因为从操作系统的角度来看它们实际上是一个单独的线程.或者Haskell运行时是否做了一些聪明的技巧来确保可以使用多个CPU?

concurrency multithreading haskell multicore lightweight-processes

58
推荐指数
2
解决办法
7815
查看次数

使用Haskell状态monad一个代码味?

上帝我讨厌"代码味"这个词,但我想不出更准确的东西.

我正在业余时间为Whitespace设计一个高级语言和编译器,以了解编译器构造,语言设计和函数编程(编译器是用Haskell编写的).

在编译器的代码生成阶段,我必须在遍历语法树时保持"状态" - 数据.例如,在编译流控制语句时,我需要为要跳转到的标签生成唯一的名称(从传入,更新和返回的计数器生成的标签,并且绝不能再次使用计数器的旧值).另一个例子是当我在语法树中遇到内联字符串文字时,它们需要永久转换为堆变量(在空白中,字符串最好存储在堆上).我目前正在处理状态monad中的整个代码生成模块来处理这个问题.

我被告知编写编译器是一个非常适合功能范例的问题,但我发现我的设计方式与我在C中设计它的方式大致相同(你真的可以用任何语言编写C语言 - 甚至Haskell w/state monads).

我想学习如何在Haskell中思考(而不是在函数范式中) - 而不是在C中使用Haskell语法.我真的应该尝试消除/最小化状态monad的使用,还是一个合法的功能"设计模式"?

monads haskell coding-style state-monad

57
推荐指数
3
解决办法
1万
查看次数

为什么Haskell代数数据类型"封闭"?

如果我错了,请纠正我,但似乎Haskell中的代数数据类型在许多你将在OO语言中使用类和继承的情况下都很有用.但是有一个很大的区别:一旦声明了代数数据类型,它就无法在其他地方扩展.它是"封闭的".在OO中,您可以扩展已定义的类.例如:

data Maybe a = Nothing | Just a
Run Code Online (Sandbox Code Playgroud)

以后我无法以某种方式为此类型添加另一个选项而不修改此声明.那么这个系统有什么好处呢?似乎OO方式可以更加可扩展.

oop haskell types type-systems functional-programming

57
推荐指数
6
解决办法
7271
查看次数

什么是"|" for在Haskell类定义中?

我无法弄清楚"| m - > w"-part在类定义中意味着什么:

class (Monoid w, Monad m) => MonadWriter w m | m -> w
Run Code Online (Sandbox Code Playgroud)

这增加了什么附加信息给类定义?

syntax haskell typeclass

54
推荐指数
2
解决办法
5939
查看次数

Scala类型系统与Haskell相比的缺点?

我已经读过Scala的类型系统被Java互操作性削弱了,因此无法执行与Haskell类型系统相同的功能.这是真的?因为类型擦除是弱点,还是我在各方面都错了?这是不同的Scala没有类型类的原因吗?

haskell type-systems scala language-comparisons static-typing

53
推荐指数
6
解决办法
6960
查看次数