对并行策略和parMap(Control.Parallel.Strategies)存在疑问
这与...的parMap rseq等价性有关parMap rpar.
由于parMap使用parList它并行评估,因此使用rseq或rpar将与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) 使用类型级别文字作为一种使用类似类型区分非空容器值(与幻像类型一样)的方法.
这很好用.(要求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 ×2