我想将相同的数据分成两个"分支"进行单独处理,然后"加入"......
+----------+
+---------+ -->| doublber |--- +--------+
+--------+ | |-- +----------+ -->| | +------+
| source |-->| splitter| | summer |-->| sink |
+--------+ | |-- +----------+ -->| | +------+
+---------+ -->| delayer |--- +--------+
+----------+
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我的尝试:
import Data.Conduit
import Control.Monad.IO.Class
import qualified Data.Conduit.List as CL
-- import Data.Conduit.Internal (zipSources)
import Control.Arrow ((>>>))
source :: Source IO Int
source = do
x <- liftIO $ getLine
yield (read x)
source
splitter :: Conduit Int IO (Int, Int)
splitter = …Run Code Online (Sandbox Code Playgroud) 这是一个测试程序:
main = do
n <- fmap read $ getLine :: IO Int
if (999999 == n) then putStrLn "equal" else return ()
Run Code Online (Sandbox Code Playgroud)
以下是编译时的相关核心位ghc --make -O2 -ddump-to-file -ddump-simpl -dsuppress-module-prefixes -dsuppress-uniques -ddump-core-stats -ddump-inlinings:
case readEither6 @ Int (run @ Int main3 ipv1) of _ [Occ=Dead] {
[] -> case error @ Int readEither4 of wild1 { };
: x ds1 ->
case ds1 of _ [Occ=Dead] {
[] ->
case x of _ [Occ=Dead] { I# ipv2 ->
case …Run Code Online (Sandbox Code Playgroud) 我正在尝试调试一个问题,它归结为......
>>> import yaml as pyyaml
>>> import ruamel.yaml as ruamel
>>> ruamel.load("x: yes") == ruamel.load("x: true")
False
>>> pyyaml.safe_load("x: yes") == pyyaml.safe_load("x: true")
True
Run Code Online (Sandbox Code Playgroud)
互联网上有传言称“yes”和“no”是保留词,分别是和 的同义词。truefalse
但 1.1 规范中只是顺便提及,但没有详细说明,并且字符串“yes”根本没有出现在1.2 规范中。
事实上,仔细查看规范的每个草案,它只会以合法的方式以任何合法的方式出现在https://yaml.org/spec/history/2002-09-01.html中,并在之后的修订中被删除。
我怀疑我在写它的过程中已经回答了我自己的问题,但是......这个关于“是/否”的事情只是胡说八道吗?它进入了实现(我的编辑甚至强调“是/否”作为特殊),或者我误解或遗漏了规范的一部分?
是否存在具有单个单位值的类型(此处不确定正确的术语),即具有某些预定义值的类型?
class Unit a where
unit :: a
instance Unit () where
unit = ()
instance Unit (Maybe a) where
unit = Nothing
Run Code Online (Sandbox Code Playgroud)
...适用于所有Monoids,MonadPlus等
我想这个班的另一个名字可能是Default.这对我来说最近有用了两次.
可能不能令人信服的例子:
extract :: (Unit r)=> Reader r a -> a
extract r = runReader r unit
Run Code Online (Sandbox Code Playgroud)
这存在吗?别人认为它可能有用吗?
这可能是一个愚蠢的问题或过于开放,但我在GHC核心输出中寻找什么来了解内存分配发生的位置?我的动机是为了更好地了解如何优化代码像这样,还是如要尽量避免在并发代码的关键部分抢占.
这是一个简单的例子,重现了我正在研究的一个真正的问题:
一个库模块:
module Lib where
class H h where
hash :: (S s)=> s -> h -> s
class S s where
mix :: s -> Int -> s
instance (H x, H y)=> H (x,y) where
hash s = \(x,y) ->
s `hash` x `hash` y
-- make this look "big":
`hash` x `hash` y `hash` x `hash` y `hash` x `hash` y `hash` x `hash` y
`hash` x `hash` y `hash` x `hash` y `hash` x `hash` y …Run Code Online (Sandbox Code Playgroud) 我试图了解父级和各种子OS线程如何在使用GHC编译的haskell程序中工作-threaded。
使用
module Main where
import Control.Concurrent
main = do
threadDelay 9999999999
Run Code Online (Sandbox Code Playgroud)
我可以-threaded在ghc 8.6.5上编译并运行,+RTS -N3例如
$ pstree -p 6615
hello(6615)???{ghc_ticker}(6618)
??{hello:w}(6616)
??{hello:w}(6617)
??{hello:w}(6619)
??{hello:w}(6620)
??{hello:w}(6621)
??{hello:w}(6622)
??{hello:w}(6623)
Run Code Online (Sandbox Code Playgroud)
看起来N*2 + 1随着我的变化,我得到了这些“ hello:w”线程+RTS -N。
这些“ hello:w”线程是什么,为什么每个HEC + 1显然有两个线程?
怎么ghc_ticker办?
我还注意到,在我正在测试的大型真实服务中+RTS -N4,例如,我获得了14个“ my-service:w”线程,在负载下,这些进程ID似乎搅动(其中一半保持活动状态,直到我杀死了服务)。
为什么14,为什么其中一半会生成并死亡?
我还将接受一个答案,该答案有助于指导我检测代码以找出后两个问题。
我一直在研究使用Haskell的抽象国际象棋算法(试图扩展我对不同范式的理解),并且我遇到了一个我一直在思考几周的挑战.
这是问题所在:
给定一个板(由整数列表表示;每个整数代表一个后续点值),维度为nxn,确定提供最多点的路径.如果最佳路径存在平局,则返回其中任何一个.
以下是具体内容:
A = [[5,4,3,1],[10,2,1,0],[0,1,2,0],[2,3,4,20]]
Run Code Online (Sandbox Code Playgroud)
其呈现为:
R1: 5 4 3 1, R2: 10 2 1 0, R3: 0 1 2 0, R4: 2 3 4 20.
Run Code Online (Sandbox Code Playgroud)
规则是:
你可以从最上面的任何地方开始
您可以一次移动一个方格,可以是直下,左下(对角线)或右下(对角线).
输出必须是整数元组.
第一个元素是表示列与行的列表,第二个元素是总点数.例如.对于上面的板,最好的解决方案是从左上角(5)行进并沿对角线行进剩余的步骤(直到20点方形).这将导致元组([1,2,3,4], 29).
记住,这一切都在Haskell中,因此它是一个功能范式的递归问题.起初,我正在考虑使用贪婪算法,即选择r1中的最高值,并通过比较接下来的3种可能性进行递归; 选择3中的最高值.然而,垮台是贪婪算法无法在下一行之前看到潜力.
我该怎么做?我不是在寻找代码本身,因为我喜欢自己解决问题.但是,非常感谢伪代码或一些算法指导!
我正在Word从字节数组中读取s并且需要使我的代码的一部分以字节序识别.GHC是否暴露了任何MachDeps.h可以用于使代码以处理器字节顺序为条件的代码?如果没有,我可以可靠地推断出HOST_ARCH(通过ghcplatform.h带arch()条件的.cabal文件中的可访问性)吗?还是其他想法?
haskell ×9
ghc ×6
optimization ×2
performance ×2
algorithm ×1
cabal ×1
conduit ×1
endianness ×1
greedy ×1
inline ×1
python ×1
pyyaml ×1
recursion ×1
ruamel.yaml ×1
unboxing ×1
yaml ×1