小编rec*_*nja的帖子

你如何检查局部变量的类型?

简单的问题.是否可以检查仅在函数内存活的变量的类型?

例如:

main = do
       x <- something
Run Code Online (Sandbox Code Playgroud)

我该如何检查x

我不能:type x在ghci 做,因为x不是全球性的.

haskell types ghci

17
推荐指数
3
解决办法
845
查看次数

Haskell重新安装基础并启用了性能分析

我正在尝试按照此处列出的说明重新安装我的Haskell库并启用性能分析

但是,每当cabal尝试重新安装其中一个库时,我都会收到以下消息:

LibraryNameHere.hs:1:1:
    Could not find module `Prelude'
    Perhaps you haven't installed the profiling libraries for package `base'?
    Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)

当我尝试重新base启动并启用性能分析时,我收到以下消息:

me@machine:~/.cabal/$ cabal install -p base
Resolving dependencies...
All the requested packages are already installed:
base-4.5.0.0
Use --reinstall if you want to reinstall anyway.
me@machine:~/.cabal/$ cabal install --reinstall -p base
Resolving dependencies...
cabal: Could not resolve dependencies:
next goal: base (user goal)
rejecting: base-4.7.0.0, 4.6.0.1, 4.6.0.0, 4.5.1.0, …
Run Code Online (Sandbox Code Playgroud)

profiling haskell ghc cabal haskell-platform

17
推荐指数
1
解决办法
2539
查看次数

使用向量的样式与性能

这是代码:

{-# LANGUAGE FlexibleContexts #-}

import Data.Int
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Generic as V

{-# NOINLINE f #-} -- Note the 'NO'
--f :: (Num r, V.Vector v r) => v r -> v r -> v r
--f :: (V.Vector v Int64) => v Int64 -> v Int64 -> v Int64
--f :: (U.Unbox r, Num r) => U.Vector r -> U.Vector r -> U.Vector r
f :: U.Vector Int64 -> U.Vector Int64 -> U.Vector Int64 …
Run Code Online (Sandbox Code Playgroud)

lambda haskell pointfree

14
推荐指数
1
解决办法
703
查看次数

Haskell:计算"在monad中" - 意思是什么?

在阅读monads时,我一直看到像"Xyz monad中的计算"这样的短语.计算"在某个monad中"是什么意思?

我认为我对monad的含义有一个公平的把握:允许计算产生通常是某种预期类型的​​输出,但可以替代地或另外地传达一些其他信息,例如错误状态,记录信息,状态等,以及允许这种计算被链接.

但我不知道计算如何被称为"在"monad中.这只是引用产生monadic结果的函数吗?

示例:(搜索"计算中")

monads haskell computation

13
推荐指数
2
解决办法
791
查看次数

为什么我们需要"代数数据类型"?

我已经阅读了代数数据类型的一些解释:

这些文章提供了非常详细的描述和代码示例.

起初我认为代数数据类型只是用于轻松定义某些类型,我们可以将它们与模式匹配相匹配.但在阅读完这些文章之后,我发现那里甚至没有提到"模式匹配",内容看起来很有趣,但比我预期的要复杂得多.

所以我有一些问题(这些文章没有回答):

  • 为什么我们需要它,比如Haskell或Scala?
  • 如果我们拥有它,我们能做什么,如果我们没有它,我们不能做什么?

haskell scala algebraic-data-types

12
推荐指数
1
解决办法
1421
查看次数

Haskell在Excel中

我已经看到一些消息来源随便提到"在Excel电子表格中使用Haskell"的想法- 好像这是每个人都熟悉和了解的东西.

这对我来说当然是个新闻.这个想法具有明显的吸引力--Haskell非常适合这种事情.但有没有人真正让这个工作?

haskell

11
推荐指数
1
解决办法
2187
查看次数

是否存在有用的Haskell HashMap/HashTable/Dictionary库?

我正在寻找一个无monad,常量访问查询O(1)关联数组.

考虑假设类型:

data HT k v = ???
Run Code Online (Sandbox Code Playgroud)

我想构建一次不可变结构:

fromList :: Foldable t, Hashable k => t (k,v) -> HT k v
Run Code Online (Sandbox Code Playgroud)

我希望随后以恒定时间访问重复查询::

lookup :: Hashable k => HT k v -> k -> Maybe v
Run Code Online (Sandbox Code Playgroud)

似乎有两个候选图书馆不足:

unordered-containers

unordered-containers包含类型的严格和惰性变体HashMap.两者HashMap都有函数记录的O(log n)查询lookup.此查询访问时间似乎是由于HashMap类型的构造,其具有允许O(log n) insert功能的内部树结构.对于许多用例而言,可理解的设计权衡,但由于我不需要可变,HashMap这种权衡妨碍了我的用例.

hashtables

hashtables包含一个HashTable类型类和三个具有不同表构造策略的实例类型.这个库的类型类定义了一个常量时间O(1) lookup函数定义,但它永远嵌入在STmonad中.没有办法"冻结"有状态HashTable实现lookup,并且没有嵌入有状态monad 的函数.当整个计算以状态monad包装时,库的类型类接口设计得很好,但这种设计不适合我的用例.


是否存在一些定义类型和函数的其他库,它们可以构造一个不可嵌入的常量访问查询O(1)关联数组,该数组未嵌入有状态monad中?

是否存在某种方法来包装或修改这些现有的基于散列的库,以生成不嵌入有状态monad …

haskell hashtable hashmap asymptotic-complexity hackage

11
推荐指数
2
解决办法
1527
查看次数

使用延迟文本和字节索引处理非常大的文本文件

我正在尝试处理一个非常大的unicode文本文件(6GB +).我想要的是计算每个独特单词的频率.Data.Map当我遍历文件时,我使用严格来跟踪每个单词的计数.这个过程需要太多时间和太多内存(20GB +).我怀疑地图很大,但我不确定它应该达到文件大小的5倍!代码如下所示.请注意我尝试了以下内容:

  • 使用Data.HashMap.Strict而不是Data.Map.Strict.Data.Map似乎在较慢的内存消耗增加率方面表现更好.

  • 使用lazy ByteString而不是lazy 读取文件Text.然后我编码为文本做一些处理,然后对其进行编码,回ByteStringIO.

    import Data.Text.Lazy (Text(..), cons, pack, append)
    import qualified Data.Text.Lazy as T
    import qualified Data.Text.Lazy.IO as TI
    import Data.Map.Strict hiding (foldr, map, foldl')
    import System.Environment
    import System.IO
    import Data.Word
    
    dictionate :: [Text] -> Map Text Word16
    dictionate = fromListWith (+) . (`zip` [1,1..])
    
    main = do
        [file,out] <- getArgs
        h <- openFile file ReadMode
        hO <- openFile out WriteMode …
    Run Code Online (Sandbox Code Playgroud)

text haskell hashmap file-processing bigdata

10
推荐指数
1
解决办法
642
查看次数

Haskell模式匹配元组列表

正如帖子标题所说,我在Haskell中定义了以下函数:

prop_LeftInverse :: (Eq a, Eq b) => [(a,b)] -> Bool
prop_LeftInverse (x,y):(xs,ys) = undefined
Run Code Online (Sandbox Code Playgroud)

应该将元组列表作为输入.我得到了一个,parse error in pattern但我无法弄清楚它是什么,也没有找到关于这个具体案例的任何信息......

haskell

9
推荐指数
1
解决办法
9505
查看次数

反向范围实施

为了记录,我是一个Haskell noob.我试图理解为什么范围可以声明为

[1..10] -- yields [1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

并不是

[10..1] -- yields []
Run Code Online (Sandbox Code Playgroud)

看起来很简单,就像这样实现它:

(.:.) :: Enum a => a -> a -> [a]
(.:.) a b =
   | a == b = []
   | a > b = a : (a - 1) .:. b
   | a < b = a : (a + 1) .:. b
Run Code Online (Sandbox Code Playgroud)

我在这里不理解什么?

haskell

9
推荐指数
2
解决办法
730
查看次数