如果你在一个cabal文件中声明一个库+可执行部分,同时通过把库放到一个hs-source-dirs目录中来避免对库的双重编译 ,你通常不能再用ghci和runhaskell来运行你的项目,特别是如果可执行文件有帮助模块本身。 什么是推荐的项目布局 只build立一次需要的东西 允许使用runhaskell 有没有黑客干净的结构?
我写了一个最近对风格问题的回答 main = untilM (isCorrect 42) (read `liftM` getLine) 和 isCorrect num guess = case compare num guess of EQ -> putStrLn "You Win!" >> return True … Martijn有用地build议了替代scheme: main = untilM (isCorrect 42) (read <$> getLine) EQ -> True <$ putStrLn "You Win!" 通过使用Control.Applicative抽象,可以使Haskell代码中哪些常见模式变得更清晰? 记住有效使用Control.Applicative的有用的经验法则是什么?
我被告知你可以解释haskell文件(我认为这意味着他们将像Ruby / Python / Perl一样工作)。 尽pipe如此,在ghc上找不到命令行选项。 它总是想编译我的文件。 看看ghci,但它总是把我变成一个repl。 我基本上只想做ghc -i MyFile.hs (其中-i是我假装与解释模式相关的标志)并且执行,以便在我尝试时获得快速反馈想法和学习。
我试图完全理解Haskell的所有概念。 与通用types类似的代数数据types是什么方式,例如,在C#和Java中? 他们有什么不同? 他们有什么代数的呢? 我熟悉通用代数及其环和领域,但我只是对Haskelltypes的工作有一个模糊的概念。
我正在阅读学习你一个Haskell ,在monad章节中,在我看来, ()被视为每种types的“null”。 当我检查GHCi中的()时,我得到了 >> :t () () :: () 这是一个非常令人困惑的说法。 看来, ()是一个types本身。 我很困惑它如何适应这种语言,以及它如何能够代表任何types。
Haskell中的id函数有哪些用途?
Eeek! GHCi在我的代码中find了Skolems! … Couldn't match type `k0' with `b' because type variable `b' would escape its scope This (rigid, skolem) type variable is bound by the type signature for groupBy :: Ord b => (a -> b) -> Set a -> Set (b, [a]) The following variables have types that mention k0 … 他们是什么? 他们想要什么与我的程序? […]
我需要一个函数,它接受任意数量的参数(全部是相同的types),对它们做一些事情,然后给出结果。 在我的具体情况下,争议清单是不切实际的。 当我查看haskell库时,我发现printf (来自模块Text.Printf )使用了类似的技巧。 不幸的是,我无法通过查看源代码来理解这种魔法。 有人可以解释如何实现这一点,或者至less有一些网页/纸/无论我可以find一个很好的描述呢? 动机: 我需要这个的原因真的很简单。 对于学校(计算机科学类),我们需要编写一个能够“logging”mathexpression式的模块,将其expression为一个string(通过为自己的数据types编写一个Num / Real / etc实例),并执行它的各种操作。 这个数据types包含一个variables的特殊构造函数,它可以被一个指定的函数replace为一个值或任何东西。 其中一个目标是编写一个函数,该函数使用一些variables(types对(Char,Rational) )来计算expression式的结果。 我们应该看看如何最好地expressionfunction的目标。 (我的想法:该函数返回另一个函数,该函数与函数中定义的variables一样多的参数 – 似乎是不可能的)。
纠正我,如果我错了,但它似乎像Haskell中的代数数据types在许多情况下,你会使用面向对象语言的类和inheritance有用。 但是有一个很大的区别:一旦声明了一个代数数据types,就不能在其他地方扩展。 这是“closures”。 在OO中,你可以扩展已经定义的类。 例如: data Maybe a = Nothing | Just a 没有办法,我可以以某种方式添加另一个选项,这种types稍后没有修改此声明。 那么这个系统有什么好处呢? 看来OO的方式会更具可扩展性。
众所周知,Haskell风格的types类和ML风格的模块为指定接口提供了不同的机制。 他们(可能)的权力是相等的,但实际上每个人都有自己的利益和弊端。 因为在语言特性方面我是一个包容性的人,所以我的问题是:在Haskell中joinML风格的模块有什么主要的理论困难? 我感兴趣的答复如下: 什么样的现有types系统function与ML风格模块交互不良? (一个糟糕的交互的例子是GADT和函数依赖,尽pipefundeps在技术上等同于关联的types!) 为了编译ML风格的模块,编译器最后必须放弃哪些东西? ML风格模块如何与types推断进行交互? 相关阅读: 罗伯特·哈珀的post引发了这个问题 讨论Haskell Reddit