小编Don*_*art的帖子

Haskell:不能使用"map putStrLn"?

我有一个字符串列表,并试过这个:

ls = [ "banana", "mango", "orange" ]

main = do
       map PutStrLn list_of_strings
Run Code Online (Sandbox Code Playgroud)

这不起作用,我不明白为什么.

ghc print-list.hs
print-list.hs:3:0:
    Couldn't match expected type `IO t' against inferred type `[IO ()]'
    In the expression: main
    When checking the type of the function `main'
Run Code Online (Sandbox Code Playgroud)

任何提示?我想它与map返回列表而不是值有关,但我没有找到一种简单的方法来解决这个问题.

现在,我知道打印字符串列表的唯一方法是编写一个函数来迭代列表,打印每个元素(如果列表是[a]则打印,但如果是(a:b)则打印和递归).但是,这将是很多简单的只使用地图...

谢谢!

io monads haskell

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

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

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

haskell type-systems scala language-comparisons static-typing

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

从C++代码调用Haskell

我目前正在用C++编写一个应用程序,发现它的一些功能可以更好地用Haskell编写.我已经看过从C代码调用Haskell的说明,但是可以用C++做同样的事情吗?

编辑:澄清一下,我正在寻找的是一种将Haskell代码编译成外部库的方法,g ++可以与C++中的目标代码链接.

更新:我已经为其他感兴趣的人提供了一个工作示例(也是我不会忘记的).

c++ linker haskell ffi

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

Haskell中的依赖注入:习惯性地解决任务

什么是依赖注入的惯用Haskell解决方案?

例如,假设您有一个接口frobby,并且您需要传递一个符合frobby周围的实例(可能有多种类型的这些实例,比方说foo,和bar).

典型的操作是:

  • 获取一些值X并返回一些值的函数Y.例如,这可能是一个数据库访问器,采用SQL查询和连接器并返回数据集.您可能需要实现postgres,mysql和模拟测试系统.

  • 获取某些值Z并返回与运行时选择Z的特定foobar样式相关的闭包的函数.

一个人解决了这个问题如下:

http://mikehadlow.blogspot.com/2011/05/dependency-injection-haskell-style.html

但我不知道这是否是规范管理此任务的方法.

haskell

53
推荐指数
3
解决办法
6569
查看次数

haskell列表中的独特元素

好吧,这可能会出现在前奏中,但是:有没有标准的库函数来查找列表中的唯一元素?我的(重新)实施,澄清,是:

has :: (Eq a) => [a] -> a -> Bool
has [] _ = False
has (x:xs) a
  | x == a    = True
  | otherwise = has xs a

unique :: (Eq a) => [a] -> [a]
unique [] = []
unique (x:xs)
  | has xs x  = unique xs
  | otherwise = x : unique xs
Run Code Online (Sandbox Code Playgroud)

haskell list

50
推荐指数
3
解决办法
4万
查看次数

Haskell中的undefined与Java中的null之间有什么区别?

两者都是类型是所有类型(无人居住)的交集的术语.两者都可以在代码中传递而不会失败,直到有人试图评估它们.我能看到的唯一区别是,在Java中,存在一个漏洞,它允许仅对null一个操作进行评估,这是一个引用相等比较(==) - 而在Haskell undefined中根本不能在不抛出异常的情况下进行评估.这是唯一的区别吗?

编辑

我真正想要解决的问题是,为什么null在Java 中包含这样一个显然很糟糕的决定,以及Haskell如何逃脱它?在我看来,真正的问题是,你可以做一些有用的null,即你可以检查它的NULL的含量.因为您可以这样做,所以在代码中传递空值并使它们表示"无结果"而不是"此程序中存在逻辑错误"已成为标准惯例.而在Haskell中,没有办法检查一个术语是否在没有评估它且程序爆炸的情况下评估到底部,因此它永远不会用这种方式来表示"没有结果".相反,一个人被迫使用类似的东西Maybe.

对不起,如果看起来我用"评价"这个词快速而宽松地玩......我试图在这里进行类比,并且难以准确地说出它.我想这表明这个比喻是不精确的.

java null haskell types maybe

50
推荐指数
2
解决办法
7485
查看次数

关于GHC实施的好的介绍性文本?

在Haskell中进行编程时(特别是在解决Project Euler问题时,其中次优解决方案往往会对CPU或内存需求造成压力)我经常感到困惑,为什么程序的行为方式如此.我看一下配置文件,尝试引入一些严格,选择另一种数据结构,...但主要是它在黑暗中摸索,因为我缺乏良好的直觉.

此外,虽然我知道如何实现Lisp,Prolog和命令式语言,但我不知道实现一种懒惰的语言.我也有点好奇.

因此,我想了解更多关于从程序源到执行模型的整个链.

我想知道的事情:

  • 应用了哪些典型的优化?

  • 当有多个评估候选者时,执行顺序是什么(虽然我知道它是从所需的输出驱动的,但是在首先评估A然后B之后可能仍然存在很大的性能差异,或者首先评估B以检测到您不需要一点都不)

  • thunk如何代表?

  • 如何使用堆栈和堆?

  • 什么是CAF?(分析表明有时热点在那里,但我没有线索)

compiler-construction optimization haskell heap-memory ghc

48
推荐指数
2
解决办法
2692
查看次数

ghc编译的二进制文件是否需要GHC或它们是独立的吗?

如果朋友想要运行我的Haskell二进制文件,他是否必须先安装Haskell,还是可以立即自行运行二进制文件?

答案在Mac,Windows和Linux上是否相同?

binary linker executable haskell

45
推荐指数
4
解决办法
6240
查看次数

Haskell守护lambda函数?

是否有可能在lambda函数上有守卫?

例如:

\k
    | k < 0     -> "negative"
    | k == 0    -> "zero"
    | otherwise -> "positive"
Run Code Online (Sandbox Code Playgroud)

syntax haskell

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

F#vs Haskell vs Lisp - 要学习哪种语言?

我听过很多关于函数式编程语言的知识,我很乐意学习它.我想这主要是为了好玩,但是,我希望它能提高我的编程技巧.

我主要是C#/ .NET背景,所以我的第一选择是学习F#(因为.NET和熟悉Visual Studio).另一方面,我想知道F#是否具有Lisp宏或Haskell高阶函数等功能.

你能比较F#,Haskell和Lisp吗?哪一个将是您选择的语言?

c# lisp f# haskell language-comparisons

42
推荐指数
9
解决办法
2万
查看次数