Questions tagged «haskell»

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

5
功能设计模式
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 有很多功能性习语:m​​onad,applicatives,arguments等。它们在不同的文章中都有记录,但不幸的是,我不知道任何本书或文章在一个地方对其进行了总结(有Typeclassopedia,但它有很多覆盖率不高的区域)。任何人都可以推荐一篇文章/书,该书/书在一个地方就可以很好地覆盖它们,并且对FP具有中级技能的程序员可以访问吗?


4
GHC Haskell中的备忘录何时自动生成?
我无法弄清楚为什么m1显然被记忆而m2不在以下内容: m1 = ((filter odd [1..]) !!) m2 n = ((filter odd [1..]) !! n) m1 10000000在第一次调用时大约需要1.5秒,而在随后的调用中则花费一小部分(大概是缓存列表),而m2 10000000总是花费相同的时间(每次调用都重建列表)。知道发生了什么吗?关于GHC是否以及何时记忆功能有任何经验法则吗?谢谢。
106 haskell  ghc  memoization 

2
Haskell中的Comonad类型类是什么?
Haskell中的Comonad类型类是什么?与Control.Comonad的comonad包中的Comonad一样(也欢迎对提供Comonad类型类的任何其他包进行解释)。我隐约听到了Comonad的信息,但我真正了解的只是它提供的东西extract :: w a -> a,与Monad的相似return :: a -> m a。 在“真实”代码中指出Comonad的“真实生活”用法的加分点。

2
不稳定的孔型分辨率
我最近发现,打样孔与样张上的图案匹配相结合,在Haskell中提供了非常不错的类似于Agda的体验。例如: {-# LANGUAGE DataKinds, PolyKinds, TypeFamilies, UndecidableInstances, GADTs, TypeOperators #-} data (==) :: k -> k -> * where Refl :: x == x sym :: a == b -> b == a sym Refl = Refl data Nat = Zero | Succ Nat data SNat :: Nat -> * …

8
Haskell,Lisp和冗长程度[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 对于那些同时具有Haskell和Lisp风格的经验的人,我很好奇在Haskell vs. Lisp中编写代码是多么“令人愉悦”(使用恐怖的术语)。 背景:我现在正在学习Haskell,之前曾与Scheme和CL一起工作过(并且对Clojure有所涉猎)。传统上,您可以认为我是动态语言的迷,因为它们提供了简洁性和快速性。我很快就爱上了Lisp宏,因为它为我提供了另一种避免冗长和模样的方法。 我发现Haskell 非常有趣,因为它向我介绍了我不知道的编码方式。它肯定有某些方面似乎有助于实现敏捷性,例如易于编写部分函数。但是,我有点担心丢失Lisp宏(我想我丢失了它们;说实话我可能还没有了解它们?)和静态类型系统。 在这两个世界上都做过相当不错的编码的人是否会评论一下体验如何不同,您更喜欢哪一种,以及所说的偏好是视情况而定的?

4
分析Haskell程序性能的工具
在解决一些Euler项目问题​​以学习Haskell时(目前我是一个完全的初学者),我遇到了问题12。我写了这个(幼稚的)解决方案: --Get Number of Divisors of n numDivs :: Integer -> Integer numDivs n = toInteger $ length [ x | x<-[2.. ((n `quot` 2)+1)], n `rem` x == 0] + 2 --Generate a List of Triangular Values triaList :: [Integer] triaList = [foldr (+) 0 [1..n] | n <- …

1
Haskell printf如何工作?
Haskell的类型安全是第二首屈一指只依赖类型语言。但是Text.Printf有一些深层的魔力,似乎很打字。 > printf "%d\n" 3 3 > printf "%s %f %d" "foo" 3.3 3 foo 3.3 3 这背后的深层魔力是什么?Text.Printf.printf函数如何接受像这样的可变参数? Haskell中允许可变参数使用的一般技术是什么,它是如何工作的? (附带说明:使用此技术时,某些类型的安全性显然丢失了。) > :t printf "%d\n" "foo" printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t

3
在Haskell中派生如何工作?
Haskell中的代数数据类型(ADT)可以自动成为某些 typeclass的实例(例如Show,Eq所)获得来自他们。 data Maybe a = Nothing | Just a deriving (Eq, Ord) 我的问题是,这是如何deriving工作的,即Haskell如何知道如何为派生的ADT实现派生的类型类的功能? 还有,为什么 deriving限于某些类型类?为什么我不能编写自己的派生类?

3
卫兵与if-then-else与Haskell中的案件
我有三个函数可以找到列表的第n个元素: nthElement :: [a] -> Int -> Maybe a nthElement [] a = Nothing nthElement (x:xs) a | a <= 0 = Nothing | a == 1 = Just x | a > 1 = nthElement xs (a-1) nthElementIf :: [a] -> Int -> Maybe a nthElementIf [] a = …

3
Cabal和Stack有什么区别?
昨天,我了解了一个名为Stack的新Haskell工具。乍一看,它看起来和Cabal差不多。那么,它们之间有什么区别?堆栈可以代替Cabal吗?在哪些情况下应该使用Stack而不是Cabal?Cabal不能做什么Stack?

6
如何在现实世界中使用函数式编程?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 函数式语言之所以不错,是因为它们可以通过消除状态来避免错误,而且还可以为您轻松地自动并行化它们,而不必担心线程数。 但是,作为Win32开发人员,我可以对应用程序的某些dll使用Haskell吗?如果我愿意,有没有真正的优势会自动带给我?如果是这样,那么给我带来这个好处的是编译器? F#是否会并行化您跨多个内核编写的函数,并自动为您自动执行cpu?您会看到任务管理器中的线程数增加吗? 基本上,我的问题是,我如何才能以一种实用的方式开始使用Haskell,如果这样做我会真的看到一些好处吗?

3
有没有办法使GHC提供类型孔的类型类约束?
当前行为 Prelude> show _ <interactive>:7:6: Found hole ‘_’ with type: a0 Where: ‘a0’ is an ambiguous type variable Relevant bindings include it :: String (bound at <interactive>:7:1) In the first argument of ‘show’, namely ‘_’ In the expression: show _ In an equation for ‘it’: it = show _ 期望的行为 …
103 haskell  types  ghc 


4
Haskell测试工作流程
我刚刚启动了一个新的Haskell项目,并希望从一开始就建立一个良好的测试工作流程。Haskell似乎拥有许多出色且独特的测试工具以及许多不同的集成方式。 我调查了: 单位 快速检查 卧推 高性能计算 复杂 所有这些似乎在各自的领域中都工作得很好,但是我正在寻找一种全面的测试方法,并且想知道哪种方法对其他人有效。
101 testing  haskell 

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.