小编Grz*_*ała的帖子

runST和函数组合

为什么这个类型检查:

runST $ return $ True
Run Code Online (Sandbox Code Playgroud)

虽然以下不是:

runST . return $ True
Run Code Online (Sandbox Code Playgroud)

GHCI抱怨:

Couldn't match expected type `forall s. ST s c0'
            with actual type `m0 a0'
Expected type: a0 -> forall s. ST s c0
  Actual type: a0 -> m0 a0
In the second argument of `(.)', namely `return'
In the expression: runST . return
Run Code Online (Sandbox Code Playgroud)

haskell function-composition

53
推荐指数
2
解决办法
3254
查看次数

使用未装箱的载体自动区分

是否有一个用于自动区分的Haskell库,可以使用未装箱的向量?在grad从功能Numeric.AD要求的一个实例Traversable,这Data.Vector.Unboxed是没有的.

unboxing haskell vector

46
推荐指数
1
解决办法
976
查看次数

Haskell中的内存有效字符串

通常推荐的Haskell字符串类型似乎是ByteString或Text.我经常使用大量短(英文单词大小)字符串,并且通常需要将它们存储在诸如Data.Map的查找表中.在许多情况下,我发现在这种情况下,字符串表可以占用比ByteStrings表更少的内存.Word8的Unboxed Data.Vectors也比ByteStrings更紧凑.

当需要在Haskell中存储和比较大量小字符串时,最佳做法是什么?

下面我试图将一个特定问题的案例压缩成一个小例子:

import qualified Data.ByteString.Lazy.Char8 as S
import qualified Data.ByteString as Strict
import qualified Data.Map as Map
import qualified Data.Vector.Unboxed as U
import qualified Data.Serialize as Serialize
import Control.Monad.State

main =   putStr 
  . unlines . map show . flip evalState (0,Map.empty) 
  . mapM toInt 
  . S.words
  =<<
  S.getContents


toInt x = do  
  let x' =   
          U.fromList . Strict.unpack .  -- Comment this line to increase memory usage
           Serialize.encode $ x  
  (i,t) <- get
  case Map.lookup x' t of …
Run Code Online (Sandbox Code Playgroud)

string haskell

23
推荐指数
1
解决办法
1330
查看次数

评估策略

如何在Haskell中的以下示例中对函数求值进行推理:

let f x = ...
    x = ...
in map (g (f x)) xs
Run Code Online (Sandbox Code Playgroud)

在GHC,有时(f x)是对各元素只计算一次,有时一次xs,这取决于究竟fg是.当f x计算成本昂贵时,这可能很重要.它刚刚绊倒了我正在帮助的Haskell初学者,我不知道该告诉他什么,除了它取决于编译器.还有更好的故事吗?

更新

在以下示例(f x)中将评估4次:

let f x = trace "!" $ zip x x
    x = "abc"
in map (\i -> lookup i (f x)) "abcd" 
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation

21
推荐指数
4
解决办法
844
查看次数

关于减少GHC中GC时间的一般建议

当GHC编译的程序花费大量时间进行垃圾收集时,是否有任何通用规则可以发现原因?什么通常被认为太多了?例如,一般来说,60%的生产率是可以接受的,还是表明代码可能存在问题?

optimization garbage-collection haskell ghc

18
推荐指数
1
解决办法
563
查看次数

如何解压缩迭代器?

给定一对对列表xys,将其解压缩为两个列表的Python成语是:

xs, ys = zip(*xys)
Run Code Online (Sandbox Code Playgroud)

如果xys是迭代器,我如何将其解压缩为两个迭代器,而不将所有内容存储在内存中?

python iterator generator python-itertools

10
推荐指数
2
解决办法
3362
查看次数

在Haddock文档中使用unicode字符

Haddock似乎错误地重新编码UTF-8编码源文件的文档中的非ASCII字符.我经常需要在文档中包含数学公式,如果可以使用诸如求和(Σ)之类的常见数学符号,它们更易读.

但是,在通过haddock运行文件后,这些符号变为空白方块.Haddock有选项,--use-unicode但只是将函数签名等中的函数箭头转换为unicode字符,同时仍然打破了实际的文档.

如果可以控制它,那就更好了cabal haddock!

我正在使用Haddock版本2.9.4.

unicode haskell haddock

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

功能通用于Foldable和Data.Vector.Unboxed

Data.Vector.Unboxed不是一个实例Foldable.编写一个适用于实例Foldable以及未装箱矢量的函数的最佳方法是什么?例如,此版本的sum工作包含列表和盒装矢量,但未取消装箱:

sum :: (Foldable t, Num a) => t a -> a
sum = Foldable.foldl' (+) 0
Run Code Online (Sandbox Code Playgroud)

haskell vector

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

盒装和非盒装载体之间的有效转换

什么是在Data.Vector.Unboxed和之间转换的推荐方法Data.Vector.具体来说,我需要将一个函数映射到一个向量上,该向量将一个无法转换的元素类型转换为Int一个非无法转换的元素类型,例如Text.我假设通过中间列表不会非常有效.

haskell vector

7
推荐指数
1
解决办法
544
查看次数

operator + =与collections.Counter的行为不一致

In [20]: from collections import Counter

In [21]: x = [Counter()]

In [22]: z = x[0]

In [23]: z.update("w")

In [24]: z
Out[24]: Counter({'w': 1})

In [25]: x
Out[25]: [Counter({'w': 1})]

In [26]: z += Counter(["q"])

In [27]: z
Out[27]: Counter({'q': 1, 'w': 1})

In [28]: x
Out[28]: [Counter({'w': 1})]
Run Code Online (Sandbox Code Playgroud)

我原x以为是[Counter({'q': 1, 'w': 1})].怎么了?

python collections operator-keyword

2
推荐指数
1
解决办法
29
查看次数

使用git rm -rf恢复目录

我添加了一个目录到本地git repo使用git add然后意外地做了git rm -rf(没有提交之前).有没有办法从这个目录中恢复文件?

git

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