Questions tagged «haskell»

Haskell是一种功能性编程语言,具有强大的静态类型,惰性评估,广泛的并行性和并发支持以及独特的抽象功能。

1
训练神经网络中出现极小的NaN值
我正在尝试在Haskell中实现神经网络架构,并在MNIST上使用它。 我正在使用hmatrix线性代数软件包。我的培训框架是使用pipes软件包构建的。 我的代码可以编译,并且不会崩溃。但是问题是,层大小(例如1000),最小批大小和学习率的某些组合会导致NaN计算中的值。经过一番检查,我发现极小的值(的顺序1e-100)最终出现在激活中。但是,即使这种情况没有发生,培训仍然无法进行。它的损失或准确性没有任何改善。 我检查并重新检查了我的代码,但对于问题的根源,我一无所知。 这是反向传播训练,它计算每一层的增量: backward lf n (out,tar) das = do let δout = tr (derivate lf (tar, out)) -- dE/dy deltas = scanr (\(l, a') δ -> let w = weights l in (tr a') * (w <> δ)) δout (zip (tail $ toList n) das) return (deltas) …

2
约束追踪技术
这是一种情况:我已经编写了一些带有类型签名的代码,GHC抱怨无法为x x和y推导某些代码y。通常,您可以将GHC扔掉,然后将同构添加到功能约束中,但这是一个坏主意,原因有以下几个: 它不强调理解代码。 您最终可以得到5个约束,而其中一个约束就足够了(例如,如果5个约束被一个更具体的约束隐含) 如果您做错了某事或GHC无助,您可能会受到虚假约束的限制 我只花了几个小时与案例3进行斗争。我正在玩syntactic-2.0,并且试图定义一个与域无关的版本share,类似于中定义的版本NanoFeldspar.hs。 我有这个: {-# LANGUAGE GADTs, FlexibleContexts, TypeOperators #-} import Data.Syntactic -- Based on NanoFeldspar.hs data Let a where Let :: Let (a :-> (a -> b) :-> Full b) share :: (Let :<: sup, Domain a ~ sup, Domain b ~ sup, SyntacticN (a -> …
322 haskell  constraints  ghc 

8
Haskell / GHC中的“ forall”关键字有什么作用?
我开始了解如何forall在这样的所谓“现有类型”中使用关键字: data ShowBox = forall s. Show s => SB s 但是,这只是如何forall使用的一个子集,我根本无法在这样的事情上全神贯注于它的使用: runST :: forall a. (forall s. ST s a) -> a 或解释为什么这些不同: foo :: (forall a. a -> a) -> (Char, Bool) bar :: forall a. ((a -> a) -> (Char, Bool)) 或整个RankNTypes东西... 我倾向于使用清晰,无术语的英语,而不是学术环境中通常使用的那种语言。我尝试阅读的大多数解释(通过搜索引擎可以找到的解释)都存在以下问题: 他们不完整。他们解释如何使用这个关键字(如“生存型”)的一个组成部分,这使得直到我读码我感到高兴的是,使用它在一个完全不同的方式(比如runST,foo和bar以上)。 假设我在本周流行的离散数学,范畴论或抽象代数的任何分支中都读到了最新的东西,他们的想法密密麻麻。(如果我从来不读的话“咨询文件无论执行的细节”再次,这将是太快了。) 它们的编写方式经常将甚至是简单的概念变成曲折而破碎的语法和语义。 所以... …
312 haskell  syntax  types  ghc  forall 

6
什么是弱头范式?
什么弱头范式(WHNF)是什么意思?什么头标准型(HNF)和范式(NF)是什么意思? 现实世界中的Haskell指出: 熟悉的seq函数将表达式计算为我们称为head正常形式(缩写为HNF)的表达式。一旦到达最外部的构造函数(“头”),它将停止。这与完全评估表达式的正常形式(NF)不同。 您还将听到Haskell程序员提到弱头正常形式(WHNF)。对于正常数据,弱磁头正常形式与磁头正常形式相同。差异仅在功能上出现,在这里太过深刻了,我们不必担心。 我已经阅读了一些资源和定义(Haskell Wiki和Haskell邮件列表和Free Dictionary),但我不明白。有人可以举一个例子或一个外行的定义吗? 我猜这将类似于: WHNF = thunk : thunk HNF = 0 : thunk NF = 0 : 1 : 2 : 3 : [] 如何seq与($!)涉及到WHNF和HNF? 更新资料 我还是很困惑。我知道一些答案说可以忽略HNF。通过阅读各种定义,似乎WHNF和HNF中的常规数据之间没有区别。但是,在功能上似乎确实有所不同。如果没有差异,为什么seq要这样做foldl'? 另一个令人困惑的地方来自Haskell Wiki,它声明seq将其简化为WHNF,并且不会对以下示例进行任何操作。然后他们说他们必须使用seq强制评估。这不是强迫它使用HNF吗? 常见的新手堆栈溢出代码: myAverage = uncurry (/) . foldl' (\(acc, len) x -> (acc+x, len+1)) (0,0) 了解seq和弱头范式(whnf)的人可以立即了解这里出了什么问题。(acc + …

7
滥用代数数据类型的代数-为什么这样做有效?
对于具有数学背景的人来说,代数数据类型的“代数”表达式非常有启发性。让我尝试解释一下我的意思。 定义了基本类型 产品 • 联盟 + 辛格尔顿 X 单元 1 并使用简写X²的X•X和2X对X+X等等,我们就可以定义,例如链表代数表达式 data List a = Nil | Cons a (List a) ↔ L = 1 + X • L 和二叉树: data Tree a = Nil | Branch a (Tree a) (Tree a) ↔ T = 1 + X • T² …

1
推拉式和箭头式FRP有何根本不同?
我想在Haskell学习FRP,但是要决定要使用的库有点困难。许多似乎是无用的尝试,有些似乎已经复活(例如最近在Yampa的活动)。 根据我的阅读,似乎有两种“种类”的FRP:一侧是推拉式FRP(例如在Reactive香蕉中),而在另一侧则是箭头式FRP(在Yampa中)。似乎在Fran和FrTime时也曾经有一些“经典FRP”,但是我没有发现这些中有任何近期活动。 这两种(或三种)真的是玻璃钢根本不同的方法吗? 其中一个是过时的理论,而另一个将是“未来的东西”吗? 还是它们必须并行发展以解决不同的目的? 我是否是每个类别中最杰出的图书馆,还是有其他选择要考虑(Sodium,Netwire等)? 我终于看了E. Czaplicki在J. Abrahamson评论中推荐的演讲。这非常有趣,确实为我澄清了一切。我强烈推荐给任何发现此问题有趣的人。


1
使用模板Haskell获取关联的类型同义词
模板Haskell可以找出在类型类中声明的相关类型同义词的名称和/或声明吗?我曾期望reify会做我想做的事,但似乎并没有提供所有必要的信息。它适用于获取函数类型签名: % ghci GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help ... Prelude> -- I'll be inserting line breaks and whitespace for clarity Prelude> -- in all GHCi output. Prelude> :set -XTemplateHaskell Prelude> import Language.Haskell.TH Prelude Language.Haskell.TH> class C a where f :: a -> Int Prelude Language.Haskell.TH> putStrLn $(stringE . …

6
Template Haskell有什么不好的地方?
似乎Haskell社区经常将Template Haskell视为一种不幸的便利。很难准确地说出我在这方面所观察到的内容,但请考虑以下几个示例 回答用户应使用/避免使用哪些Haskell(GHC)扩展名的问题,将模板Haskell列在“丑陋(但必要)”下。 Haskell模板在“新值值的未装箱的向量”线程(库邮件列表)中考虑了一种临时/次等解决方案 经常批评Yesod过于依赖Template Haskell(请参阅博客文章以回应此观点) 我见过很多博客文章,其中人们使用Template Haskell做得很漂亮,可以实现更漂亮的语法,这在常规Haskell中是不可能实现的,并且大大减少了样板。那么,为什么以这种方式看不起模板Haskell?是什么使它不受欢迎?在什么情况下应避免使用Haskell模板,为什么?

4
为什么Haskell(GHC)这么快?
Haskell(使用GHC编译器)比您期望的要快得多。正确使用它可以接近低级语言。(Haskellers最喜欢做的事情是尝试获得5%的C(甚至击败它),但这意味着您正在使用效率低下的C程序,因为GHC将Haskell编译为C。)我的问题是,为什么? Haskell是声明性的,基于lambda演算。机器架构显然必须基于图灵机。实际上,Haskell甚至没有特定的评估顺序。另外,无需处理机器数据类型,而是始终创建代数数据类型。 最奇怪的是高阶函数。您可能会认为,即时创建函数并将其扔掉会使程序变慢。但是使用高阶函数实际上会使Haskell更快。实际上,为了优化Haskell代码,您似乎需要使其更优雅,更抽象,而不是像机器一样。如果不能改善Haskell的更高级功能,它们似乎都不会影响它的性能。 抱歉,这听起来很抱歉,但这是我的问题:考虑到Haskell的抽象性质以及与物理机器的区别,为什么Haskell(与GHC编译)这么快? 注意:我说C和其他命令式语言在某种程度上类似于图灵机的原因(但在某种程度上来说,Haskell与Lambda微积分不一样)是,在命令式语言中,您具有有限数量的状态(即行号)以及Tape(撞锤),以便状态和当前磁带决定对磁带执行什么操作。从图灵机到计算机的过渡,请参阅Wikipedia条目,图灵机等效项。

4
比较Haskell的Snap和Yesod Web框架
最近新闻中的两个Haskell Web框架是Yesod(0.8)和Snap(0.4)。 很明显,Yesod目前比Snap支持更多的功能。但是,我无法忍受Yesod用于HTML,CSS和Javascript的语法。 因此,我想了解如果我选择使用Snap,将会缺少什么。例如,看起来好像没有数据库支持。会议怎么样?其他特性?

1
Haskell:列表,数组,向量,序列
我正在学习Haskell,并阅读了几篇有关Haskell列表和(插入您的语言)数组的性能差异的文章。 作为学习者,我显然只使用列表,甚至没有考虑性能差异。我最近开始调查,发现Haskell中提供了许多数据结构库。 有人可以解释列表,数组,向量,序列之间的区别,而无需深入了解数据结构的计算机科学理论吗? 另外,是否有一些常见的模式可以使用一种数据结构代替另一种数据结构? 我还缺少其他任何形式的数据结构并且可能有用吗?
230 haskell 

7
Haskell对Node.js的响应是什么?
我相信Erlang社区不会羡慕Node.js,因为它本身就进行非阻塞I / O,并具有将部署轻松扩展到一个以上处理器(Node.js甚至没有内置的功能)的方法。有关更多详细信息,请访问http://journal.dedasys.com/2010/04/29/erlang-vs-node-js和Node.js或Erlang 那Haskell呢?Haskell是否可以提供Node.js的某些好处,即一种避免使用I / O而不使用多线程编程的干净解决方案? Node.js有很多吸引人的地方 事件:无线程操作,程序员仅提供回调(如Snap框架中一样) 回调保证在单个线程中运行:不可能出现竞争条件。 漂亮又简单的UNIX友好API。奖励:出色的HTTP支持。DNS也可用。 默认情况下,每个I / O都是异步的。这样可以更轻松地避免锁定。但是,回调中过多的CPU处理会影响其他连接(在这种情况下,任务应拆分为较小的子任务并重新计划)。 客户端和服务器端使用相同的语言。(但是,我认为这一点没有太大价值。jQuery和Node.js共享事件编程模型,但其余部分却大不相同。我只是看不到如何在服务器端和客户端之间共享代码。在实践中很有用。) 所有这些都包装在一个产品中。

6
在Android操作系统上运行Haskell程序
前言:这是在/ r / haskell上启动的线程的扩展 让我们从事实开始: Android是一个很棒的操作系统 Haskell是地球上最好的编程语言 因此,显然,将它们组合在一起将使Android开发更好。因此,从本质上讲,我只想知道如何为Android OS编写Haskell程序。我的问题是: 如何获得Haskell程序以在Android OS上执行/运行?

2
-XAllowAmbiguousTypes什么时候合适?
我最近发布了一个问题,关于句法2.0有关的定义share。我已经在GHC 7.6中工作了: {-# LANGUAGE GADTs, TypeOperators, FlexibleContexts #-} import Data.Syntactic import Data.Syntactic.Sugar.BindingT data Let a where Let :: Let (a :-> (a -> b) :-> Full b) share :: (Let :<: sup, sup ~ Domain b, sup ~ Domain a, Syntactic a, Syntactic b, Syntactic (a -> b), SyntacticN (a …
212 haskell  ghc 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.