haskell相关内容
我的问题是,Haskell中的单体是否真的保持了Haskell的纯净,如果是的话,又是如何保持的。我经常读到关于副作用是如何不纯的,但有用的程序(例如I/O)需要副作用。在接下来的一句话中,哈斯克尔对此的解决方案是单体。然后,人们在某种程度上解释了单药,但并没有真正说明它们如何解决副作用问题。 我见过this和this,我对答案的解释实际上是我自己读到的--IO单元格的操作和操作不是I/O本
..
我正在学习哈斯克尔的Monad。 我读了here关于Monad的很好的解释,我觉得对>>=绑定运算符和Monad有了解(不是全部,但我是刚刚开始的)。 在我老师的幻灯片上,我发现了这个: class Monad m where (>>=) :: m a -> (a -> m b) -> m b -- "bind" (>>)
..
阅读http://learnyouahaskell.com/functors-applicative-functors-and-monoids#applicative-functors后,我可以提供一个将函数用作应用函数器的示例: 假设res是一个有4个参数的函数,而fa、fb、fc、fd都是只接受一个参数的函数。那么,如果我没有记错的话,这个实用的表达是: f fa fb
..
由于Functor-Applicative-Monad Proposal,Monad是应用类的子类,而应用类又是函数子类。从数学上讲,这似乎是一个明智的选择,我对此没有任何问题。 然而,令我恼火的是,即使fmap和pure和的相应定律无论如何都是由单子定律固定的,也需要写下函数式和应用实例。事实上,在上面的链接提案中,它们自己写道:&您只需添加以下代码即可从Monad派生这些实例:
..
我需要计算从1..n开始的所有阶乘的乘积。 当我调用此函数Double_Factors(至少有2个或3个作为参数)时, 它似乎被调用了一会儿,但什么也没有发生,几秒钟后GHCI就关闭了。怎么啦?有没有什么我看不见的无限递归? 以下是我的代码: double_factorial :: Integer->Integer double_factorial n | n
..
我正试图从blog on recursion schemes中理解组织同构。我在运行博客中提到的解决change making problem的例子时遇到了一个问题。 找零问题取一种货币的面额,并试图找到创造一笔给定货币所需的最小硬币数量。下面的代码摘自博客,应该可以计算出答案。 {-# LANGUAGE DeriveFunctor #-} module Main where impo
..
如何使用OCaml或SML表示来自Haskell的以下数据类型? newtype Fix f = In (f (Fix f)) 推荐答案 我已经answered this question on the mailing-list了(我必须说,您在两个不同的地方问这个问题没有几天的好时间,我有点不高兴,因为这可能会引起重复的努力),但是让我们在这里重复一下。 这里有一个困难,因为O
..
我在Win 10上使用GHCi 8.10.2。 我有一个名为srcLoadAndInteractiveDiffer.hs的源文件,其中只包含: module LoadAndInteractiveDiffer where testNothingIsNothing = Nothing == Nothing 将其加载到GHCi时,我收到: Prelude> :l src/LoadAn
..
编辑:我已经跟进了更多specific question。感谢这里的答题者,我认为接下来的问题更好地解释了我在这里介绍的一些念力。 tl;dr在构造函数上使用带有存在约束的GADT时,我很难在表达式中获得约束的证明。(很严重,对不起!) 我已将一个问题归纳为以下几点。我有一个简单的GADT,它表示称为X的点和称为F的函数应用程序。点X被约束为Objects。 data GADT
..
我用Haskell编写了一个简单的程序,播放the guessing game described in The Rust Programming Language book: 它的工作原理是这样的:程序将生成一个介于1和100之间的随机整数。然后,它会提示玩家输入一个猜测。输入猜测后,它将指示猜测是过低还是过高。如果猜测正确,游戏将打印祝贺并退出。 这是我写的: import
..
我有一个非常奇怪的问题。与在ghci中运行相比,以下代码在编译时会产生不同的结果, main = do putStr "Please enter your name: " name
..
假设我在Haskell中有一个用于存储值的简单数据类型: data V a = V a 我想使V成为Show的实例,而不考虑a的类型。如果a是Show的实例,则show (V a)应返回show a,否则应返回错误消息。或在伪哈斯克尔中: instance Show (V a) where show (V a) = if a instanceof Show
..
如何在函数式编程语言中递增变量? 例如,我希望这样做: main :: IO () main = do let i = 0 i = i + 1 print i 预期输出: 1 推荐答案 简单的方法是引入变量名的隐藏: main :: IO () -- another way, simpler, spec
..
最初我以为我会使用 apt-get 使用几个命令来安装 Haskell,但它似乎有点复杂. 当我查看 haskell org 下载页面时,我下载了 haskell-platform-2013.2.0.0.tar.gz.然后下一步有点令人困惑.它要求在安装平台之前安装 GHC 但同时如果打开 GHC 下载页面,它会显示一些警告,例如 Stop !.....我们建议安装 Haskell 平台而不
..
我最近一直在使用带有 SBT 的 Scala.REPL 循环有一个方便的功能:~COMMAND,意思是对项目中的每个源文件更改执行 COMMAND.例如: ~测试 和 ~编译 非常对快速开发很有用.我想知道,有没有人知道 Haskell 类似的东西,一个阴谋集团的外壳,也许? 解决方案 你可以很容易地使用 inotifywait. 只需在您的项目目录中启动一个终端并运行以下内
..
可折叠 是 Traversable,类似于 Functor 是 Applicative 和 Monad 的超类. 类似于Monad的情况,基本上可以将fmap实现为 liftM :: Monad m =>(a->b)->m a ->mb提升M f q = 返回.f =
..
Traversable 在某种意义上是一种容器类,其结构具有“路径"(可以对应于列表),可以在不分解结构的情况下修改其上的元素.因此 zipTrav :: Traversable t =>t a ->[b]->也许 (t (a,b))zipTrav = evalStateT .遍历 zp其中 zp a = 做bs 什么都没有(b:bs') ->把 bs'>>返回 (a,
..
..
更高等级的类型看起来很有趣.这个例子来自 Haskell wikibook: foo :: (forall a.a -> a) -> (Char,Bool)foo f = (f 'c', f True) 现在我们可以评估 foo id 而不会导致编译器爆炸.这个例子在本书后面很快出现了我在其他几个地方看到的真实例子:ST monad 和 runST.这很酷. 但是我还没有遇到过这样的情况
..
let a = b in c 可以被认为是 (\a -> c) b 的语法糖,但在一般的类型化设置中它不是案子.例如,在 Milner 演算中 let a = \x ->;x in (a True, a 1) 是可键入的,但看似等效的 (\a -> (a True, a 1)) (\x -> x) 不是. 但是,后者在系统 F 中是可键入的,第一个 lambda 为 2 级类型. 我的
..