Questions tagged «haskell»

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

1
有约束的专业化
我在让GHC专门化具有类约束的函数时遇到问题。我有我的问题的一个小例子,在这里:Foo.hs和 Main.hs。这两个文件将编译(GHC 7.6.2,ghc -O3 Main)并运行。 注意: Foo.hs真的被剥夺了。如果您想了解为什么需要约束,可以在此处查看更多代码。如果我将代码放在单个文件中或进行许多其他小的更改,GHC只会内联对的调用plusFastCyc。在实际代码中不会发生这种情况,因为plusFastCyc即使GHC标记为,也无法内联INLINE。关键是要专门针对plusFastCyc,而不是内联它。plusFastCyc在实际代码中的很多地方都调用了,因此即使希望强制GHC进行复制,也无法复制这么大的函数。 感兴趣的代码是plusFastCycin Foo.hs,在此处复制: {-# INLINEABLE plusFastCyc #-} {-# SPECIALIZE plusFastCyc :: forall m . (Factored m Int) => (FastCyc (VT U.Vector m) Int) -> (FastCyc (VT U.Vector m) Int) -> (FastCyc (VT U.Vector m) Int) #-} -- Although the next specialization makes `fcTest` fast, …
156 haskell  ghc 

7
folder vs.foldl(或foldl')的含义
首先,我正在阅读的Real World Haskell说永远不要使用foldl,而是使用foldl'。所以我相信。 但我在朦胧时使用foldr对foldl'。尽管我可以看到它们摆在我面前的方式各不相同,但我还是很愚蠢,无法理解何时“哪个更好”。我想在我看来,使用哪个并不重要,因为它们都产生相同的答案(不是吗?)。实际上,我以前使用此构造的经验来自Ruby inject和Clojure的reduce,它们似乎没有“ left”和“ right”版本。(旁问:他们使用哪个版本?) 任何能帮助像我这样的聪明人挑战的见解将不胜感激!

6
为什么GHC这么大/大?
有一个简单的答案:GHC为什么这么大? OCaml:2MB 的Python:15MB SBCL:9MB OpenJRE-26MB GHC:113MB 对“为什么Haskell是正确的工具,为什么我不应该关心大小”的布道不感兴趣;这是一个技术问题。
147 haskell  ghc 

1
使用Esqueleto处理列表类型
我将数据类型定义为: data ComitteeView = CommitteeView { committeeId :: CommitteeId , committeeMembers :: [Person] } data CommitteesView = CommitteesView { committeeView :: [CommitteeView] } 现在,就目前而言,我有一个持久模型定义为: Person name Text Committee name Text CommitteePerson personId PersonId committeeId CommitteeId 我可以很容易地使用Esqueleto创建一个查询来填充CommitteeView。它会像这样: getCommitteeView cid = CommitteeView <$> runDB $ select $ from (person `InnerJoin` pxc `InnerJoin` …
144 sql  list  haskell  esqueleto 

2
GHC-mod是否必须对类型使用全名?
我正在尝试使用ghc-modvim插件进行类型/语法检查等。但是,我发现ghc-mod错误消息中始终使用类型的完整路径,例如: test.hs|71 col 13 error| Couldn't match type ‘Data.Text.Internal.Text’ || with ‘[GHC.Types.Char]’ || Expected type: containers-0.5.6.2:Data.Map.Base.Map || [GHC.Types.Char] || ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer, || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)], || containers-0.5.6.2:Data.Set.Base.Set || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer) || Actual type: containers-0.5.6.2:Data.Map.Base.Map || Data.Text.Internal.Text || ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer, || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)], || containers-0.5.6.2:Data.Set.Base.Set || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer) || In the second argument of ‘containers-0.5.6.2:Data.Map.Base.map’, namely || ‘zippedMap’ …
143 haskell  ghc  ghc-mod 

1
正确使用HsOpenSSL API实施TLS服务器
我试图弄清楚如何在并发上下文中正确使用OpenSSL.Session API 例如,假设我要实现stunnel-style ssl-wrapper,我希望具有以下基本框架结构,该结构可以实现幼稚full-duplex tcp-port-forwarder: runProxy :: PortID -> AddrInfo -> IO () runProxy localPort@(PortNumber lpn) serverAddrInfo = do listener <- listenOn localPort forever $ do (sClient, clientAddr) <- accept listener let finalize sServer = do sClose sServer sClose sClient forkIO $ do tidToServer <- myThreadId bracket (connectToServer serverAddrInfo) finalize …
141 haskell  openssl  ssl 


1
如何使用Language.Haskell.Interpreter交付可执行文件?
我希望使用嵌入Haskell解释器,hint以便可以在Haskell中编写插件以与程序一起使用。我不想为我的可执行文件提供整个Haskell平台。 通常,Haskell可执行文件是完全独立的。例如,擦除PATH不会导致问题: $ PATH=. Hello Hello world 但是,runInterpreter如果我擦除了一个使用炸弹的简单测试程序,则PATH: $ PATH=. TryHint GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n" 环境中必须提供哪些库或可执行文件才能使其正常工作? otool 没有给出太多指导: otool -L TryHint TryHint: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current …

8
在Haskell中记忆化?
有关如何有效地解决Haskell中以下函数的所有问题的大量建议 (n > 108) f(n) = max(n, f(n/2) + f(n/3) + f(n/4)) 我已经在Haskell中看到了用于记忆斐波那契数的记忆示例,其中涉及(懒惰地)计算直到所需n的所有斐波那契数。但是在这种情况下,对于给定的n,我们只需要计算很少的中间结果。 谢谢

2
为什么λ微积分的最佳评估器无需公式就可以计算较大的模幂?
教堂数字是自然数作为函数的编码。 (\ f x → (f x)) -- church number 1 (\ f x → (f (f (f x)))) -- church number 3 (\ f x → (f (f (f (f x))))) -- church number 4 整整齐齐地,您只需应用两个教堂数字即可对其求幂。也就是说,如果您将4应用于2,则会得到教堂编号16或2^4。显然,这完全不可行。教堂号码需要线性的存储空间,而且速度非常慢。计算类似的10^10内容-GHCI可以快速正确回答-可能会花费一些时间,而且无论如何都无法容纳计算机的内存。 最近,我一直在尝试使用最佳λ评估器。在测试中,我不小心在最佳λ计算器上键入了以下内容: 10 ^ 10 % 13 它应该是乘法,而不是幂。在我不由自主地终止永远运行的程序之前,它满足了我的要求: 3 { iterations: 11523, applications: 5748, …

5
Haskell和F#之间的主要区别是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我已经在Internet上搜索了F#和Haskell之间的比较,但是还没有找到真正确定的东西。主要区别是什么?为什么我要选择一个?

5
GHCi中的多行命令
我在ghci中输入多行命令时遇到问题。 以下两行代码可从文件运行: addTwo :: Int -> Int -> Int addTwo x y = x + y 但是当我输入ghci时,出现错误: <interactive>:1:1: error: Variable not in scope: addTwo :: Int -> Int -> Int 我还尝试将代码放入:{ ... :},但它们也不适用于本示例,因为这只是将行追加到一行中,事实并非如此。 我正在使用WinGHCi,版本2011.2.0.1
134 haskell  ghci 


5
减少Haskell程序中的垃圾收集暂停时间
我们正在开发一个程序,该程序可以接收和转发“消息”,同时保留这些消息的临时历史记录,以便在需要时可以告诉您消息的历史记录。消息是通过数字标识的,通常大小约为1 KB,我们需要保留成百上千的此类消息。 我们希望针对延迟优化此程序:发送和接收消息之间的时间必须小于10毫秒。 该程序用Haskell编写,并由GHC编译。但是,我们发现,垃圾回收暂停对于我们的延迟要求来说太长了:在我们的实际程序中超过100毫秒。 以下程序是我们应用程序的简化版本。它使用a Data.Map.Strict来存储消息。消息ByteString由标识Int。1,000,000条消息以递增的数字顺序插入,并且最旧的消息不断被删除,以使历史记录最多保留200,000条消息。 module Main (main) where import qualified Control.Exception as Exception import qualified Control.Monad as Monad import qualified Data.ByteString as ByteString import qualified Data.Map.Strict as Map data Msg = Msg !Int !ByteString.ByteString type Chan = Map.Map Int ByteString.ByteString message :: Int -> Msg message n = …

4
Haskell中`mod`和`rem`之间的区别
mod和remHaskell 之间的确切区别是什么? 两者似乎给出相同的结果 *Main> mod 2 3 2 *Main> rem 2 3 2 *Main> mod 10 5 0 *Main> rem 10 5 0 *Main> mod 1 0 *** Exception: divide by zero *Main> rem 1 0 *** Exception: divide by zero *Main> mod 1 (-1) 0 *Main> rem 1 (-1) …
130 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.