我有一个字符串列表,并试过这个:
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)则打印和递归).但是,这将是很多简单的只使用地图...
谢谢!
我已经读过Scala的类型系统被Java互操作性削弱了,因此无法执行与Haskell类型系统相同的功能.这是真的?因为类型擦除是弱点,还是我在各方面都错了?这是不同的Scala没有类型类的原因吗?
haskell type-systems scala language-comparisons static-typing
我目前正在用C++编写一个应用程序,发现它的一些功能可以更好地用Haskell编写.我已经看过从C代码调用Haskell的说明,但是可以用C++做同样的事情吗?
编辑:澄清一下,我正在寻找的是一种将Haskell代码编译成外部库的方法,g ++可以与C++中的目标代码链接.
更新:我已经为其他感兴趣的人提供了一个工作示例(也是我不会忘记的).
什么是依赖注入的惯用Haskell解决方案?
例如,假设您有一个接口frobby,并且您需要传递一个符合frobby周围的实例(可能有多种类型的这些实例,比方说foo,和bar).
典型的操作是:
获取一些值X并返回一些值的函数Y.例如,这可能是一个数据库访问器,采用SQL查询和连接器并返回数据集.您可能需要实现postgres,mysql和模拟测试系统.
获取某些值Z并返回与运行时选择Z的特定foo或bar样式相关的闭包的函数.
一个人解决了这个问题如下:
http://mikehadlow.blogspot.com/2011/05/dependency-injection-haskell-style.html
但我不知道这是否是规范管理此任务的方法.
好吧,这可能会出现在前奏中,但是:有没有标准的库函数来查找列表中的唯一元素?我的(重新)实施,澄清,是:
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) 两者都是类型是所有类型(无人居住)的交集的术语.两者都可以在代码中传递而不会失败,直到有人试图评估它们.我能看到的唯一区别是,在Java中,存在一个漏洞,它允许仅对null一个操作进行评估,这是一个引用相等比较(==) - 而在Haskell undefined中根本不能在不抛出异常的情况下进行评估.这是唯一的区别吗?
我真正想要解决的问题是,为什么null在Java 中包含这样一个显然很糟糕的决定,以及Haskell如何逃脱它?在我看来,真正的问题是,你可以做一些有用的带null,即你可以检查它的NULL的含量.因为您可以这样做,所以在代码中传递空值并使它们表示"无结果"而不是"此程序中存在逻辑错误"已成为标准惯例.而在Haskell中,没有办法检查一个术语是否在没有评估它且程序爆炸的情况下评估到底部,因此它永远不会用这种方式来表示"没有结果".相反,一个人被迫使用类似的东西Maybe.
对不起,如果看起来我用"评价"这个词快速而宽松地玩......我试图在这里进行类比,并且难以准确地说出它.我想这表明这个比喻是不精确的.
在Haskell中进行编程时(特别是在解决Project Euler问题时,其中次优解决方案往往会对CPU或内存需求造成压力)我经常感到困惑,为什么程序的行为方式如此.我看一下配置文件,尝试引入一些严格,选择另一种数据结构,...但主要是它在黑暗中摸索,因为我缺乏良好的直觉.
此外,虽然我知道如何实现Lisp,Prolog和命令式语言,但我不知道实现一种懒惰的语言.我也有点好奇.
因此,我想了解更多关于从程序源到执行模型的整个链.
我想知道的事情:
应用了哪些典型的优化?
当有多个评估候选者时,执行顺序是什么(虽然我知道它是从所需的输出驱动的,但是在首先评估A然后B之后可能仍然存在很大的性能差异,或者首先评估B以检测到您不需要一点都不)
thunk如何代表?
如何使用堆栈和堆?
什么是CAF?(分析表明有时热点在那里,但我没有线索)
如果朋友想要运行我的Haskell二进制文件,他是否必须先安装Haskell,还是可以立即自行运行二进制文件?
答案在Mac,Windows和Linux上是否相同?
是否有可能在lambda函数上有守卫?
例如:
\k
| k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
Run Code Online (Sandbox Code Playgroud) 我听过很多关于函数式编程语言的知识,我很乐意学习它.我想这主要是为了好玩,但是,我希望它能提高我的编程技巧.
我主要是C#/ .NET背景,所以我的第一选择是学习F#(因为.NET和熟悉Visual Studio).另一方面,我想知道F#是否具有Lisp宏或Haskell高阶函数等功能.
你能比较F#,Haskell和Lisp吗?哪一个将是您选择的语言?