小编Gab*_*iba的帖子

并行parMap和策略

对并行策略和parMap(Control.Parallel.Strategies)存在疑问

这与...的parMap rseq等价性有关parMap rpar.

由于parMap使用parList它并行评估,因此使用rseqrpar将与WHNF并行评估.不是吗?

更新:

以来

parMap strat f = (`using` parList strat) . map f

parList = parTraversable

parTraversable strat = evalTraversable (rpar `dot` strat)

evalTraversable = traverse

strat2 `dot` strat1 = strat2 . runEval . strat1
Run Code Online (Sandbox Code Playgroud)

parMap rseq 使用策略

rpar `dot` rseq
Run Code Online (Sandbox Code Playgroud)

这使:

rpar . runEval . rseq
Run Code Online (Sandbox Code Playgroud)

这使:

(\x -> x `par` return x) . runEval . (\x -> x `pseq` return …
Run Code Online (Sandbox Code Playgroud)

haskell

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

类型级别文字 - 不能在二进制函数中使用不同类型的参数

使用类型级别文字作为一种使用类似类型区分非空容器值(与幻像类型一样)的方法.

这很好用.(要求GHC> = 7.6.1)

但是试图定义一个二元函数(eq)

eq :: (Eq a) => TMaybe (sym :: Symbol) a -> TMaybe (sym :: Symbol) a -> Bool
Run Code Online (Sandbox Code Playgroud)

允许使用不同的值组,在使用时发出编译错误信号:

无法匹配类型"Just"' with"Nothing"'

{-# LANGUAGE DataKinds, KindSignatures, GADTs, FlexibleInstances #-} 

import GHC.TypeLits

data TMaybe :: Symbol -> * -> * where
  TNothing  :: TMaybe "Nothing" a
  TJust :: a -> TMaybe "Just" a

nonEmpty :: Maybe a -> TMaybe "Just" a
nonEmpty (Just x) = TJust x
nonEmpty Nothing = error "invalid nonEmpty …
Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

haskell ×2