小编Mic*_*Fox的帖子

有没有办法在posix shell或bash中扇出流?

我想要一些像以下一样的东西:

cat a > b
prog1 < b
prog2 < b
Run Code Online (Sandbox Code Playgroud)

无需创建临时b文件.

如果我只有一个程序,我可以使用管道:

cat a | prog1
Run Code Online (Sandbox Code Playgroud)

我想知道shell是否具有支持以下内容的语法:

cat a (|prog1) (|prog2)
Run Code Online (Sandbox Code Playgroud)

或者有一个方便的实用程序,可以帮助?就像是:

cat a | fanout prog1 prog2
Run Code Online (Sandbox Code Playgroud)

linux bash shell posix utility

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

让Aeson处理混合类型列表

这有效:

? decode "[\"one\", \"two\"]" :: Maybe [Text]
Just ["one","two"]
Run Code Online (Sandbox Code Playgroud)

这有效:

? decode "[1, 2]" :: Maybe [Int]
Just [1,2]
Run Code Online (Sandbox Code Playgroud)

这是完全有效的JSON,但我不能使它工作:

? decode "[\"one\", 2]" :: Maybe [Text]
Nothing
Run Code Online (Sandbox Code Playgroud)

甚至:

? decode "[2]" :: Maybe [Text]
Nothing
Run Code Online (Sandbox Code Playgroud)

我想说服最后一个给我:

Just ["one","2"]
Just ["2"]
Run Code Online (Sandbox Code Playgroud)

但我无法看到扭曲Aeson的手臂,看到它想要看到的数字作为字符串而不是.

更新:

? decode "[1, \"2\"]" :: Maybe Array
Just (fromList [Number 1.0,String "2"])
Run Code Online (Sandbox Code Playgroud)

我想这会好一些.我仍然希望我能让Aeson强迫所有的东西串起来,但我想我可以使用它.

haskell aeson

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

约束实例方法

我想写:

{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE DatatypeContexts #-}

data Ord a => S a = ...
toList :: Ord a => S a -> [a]
fromList :: Ord a => [a] -> S a

instance Functor S where
  fmap :: (Ord a, Ord b) => (a -> b) -> S a -> S b
  fmap f = fromList . fmap f . toList
Run Code Online (Sandbox Code Playgroud)

但GHC一直在打击我

方法签名与类不匹配

问题:

  • 你知道一个解决方法吗?
  • 这个限制解决了什么问题?

haskell

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

为什么`-threaded`会让它变慢?

一个简单的计划:

import qualified Data.ByteString.Lazy.Char8 as BS

main = do
  wc <- length . BS.words <$> BS.getContents
  print wc
Run Code Online (Sandbox Code Playgroud)

为速度而建:

ghc -fllvm -O2 -threaded -rtsopts Words.hs
Run Code Online (Sandbox Code Playgroud)

更多的CPU意味着更慢?

$ time ./Words +RTS -qa -N1 < big.txt
331041862

real  0m25.963s
user  0m21.747s
sys 0m1.528s
$ time ./Words +RTS -qa -N2 < big.txt
331041862

real  0m36.410s
user  0m34.910s
sys 0m6.892s
$ time ./Words +RTS -qa -N4 < big.txt
331041862

real  0m42.150s
user  0m55.393s
sys 0m16.227s
Run Code Online (Sandbox Code Playgroud)

好的措施:

$time wc -w big.txt
 331041862 big.txt

real    0m8.277s …
Run Code Online (Sandbox Code Playgroud)

multithreading haskell ghc

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

像replicateM一样复制A的方法?

有:

getSdr = Sdr <$> u1 <*> u1 <*> u1 <*> getU1List <*> mcn <*> mcn?
             <*> mcn <*> mcn <*> mcn <*> mcn <*> mcn <*> mcn <*> mcn
             <*> mcn <*> mcn <*> mcn <*> mcn <*> mcn <*> mcn <*> mcn
Run Code Online (Sandbox Code Playgroud)

想:

getSdr = Sdr <$> u1 <*> u1 <*> u1 <*> getU1List <*> replicateA 16 mcn
Run Code Online (Sandbox Code Playgroud)

我注意到有replicateA,Data.Sequence但我不知道该库或它是否可以在这里帮助.它没有打字,因为它是

replicateA :: Applicative f => Int -> f a -> f (Seq a)
Run Code Online (Sandbox Code Playgroud)

似乎没有逃脱 Seq …

haskell applicative

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

Parsec:在2014年获得buildexpressionParser示例到typecheck

以下是http://hackage.haskell.org/package/parsec-3.1.7/docs/Text-Parsec-Expr.html的示例:

expr    = buildExpressionParser table term
        <?> "expression"

term    =  parens expr 
        <|> natural
        <?> "simple expression"

table   = [ [prefix "-" negate, prefix "+" id ]
        , [postfix "++" (+1)]
        , [binary "*" (*) AssocLeft, binary "/" (div) AssocLeft ]
        , [binary "+" (+) AssocLeft, binary "-" (-)   AssocLeft ]
        ]

binary  name fun assoc = Infix (do{ reservedOp name; return fun }) assoc
prefix  name fun       = Prefix (do{ reservedOp name; return fun })
postfix name …
Run Code Online (Sandbox Code Playgroud)

haskell parsec

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

融合遍历

Traversable的论文给出了融合monoidal和一元遍历这听起来真的很有趣的18-19页上的一个例子,但我被他们的LaTex的混淆.

cciBody :: Char -> Count a
wciBody :: Char -> (|M| (State Bool) DotInASquare Count) a
Run Code Online (Sandbox Code Playgroud)

结果令人惊讶:

(traverse cciBody) xInACircle (traverse wciBody)
Run Code Online (Sandbox Code Playgroud)

是相同的:

traverse (cciBody xInACircle wciBody)
Run Code Online (Sandbox Code Playgroud)

我认为结果的类型是:

Count XInASquare (|M| (State Bool) DotInASquare Count) [a]
Run Code Online (Sandbox Code Playgroud)

但不是100%肯定.说话表情符号的人可以告诉我它应该如何看待Haskell吗?

更新

我认为xInACircle可能是一个中缀sequenceA.类型匹配.或者也许它只是(,)一个实例Traversable.<*>即使结果看起来有点像,t (x <*> y) = t x <*> t y但它们在文章中没有使用Wingding,这绝对不是<*>.

更新2

xInACircle的类型是(Functor m,Functor n)⇒(a→mb)→(a→nb)→(a→(m XInASquare n)b).提醒你什么?不是我.

haskell traversal haskell-lens

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

(一种简单的方法)调用具有特定值的函数是编译时错误?

我认为不可能(或需要某些语言扩展)来制作类似的功能

f :: Maybe Int
f (Just n) = n
f Nothing = ... -- a compile-time error
Run Code Online (Sandbox Code Playgroud)

你也无法做出如下功能:

g :: MyClass a => Int -> a
g n | n < 10    = TypeClassInstance
    | otherwise = OtherTypeClassInstance
Run Code Online (Sandbox Code Playgroud)

所以,我正在从着名的NICTA FP课程开始研究这个tic-tac-toe API,这需要做以下事情:

takeBack:选择一个完成的棋盘或一个至少有一次移动的棋盘,然后返回一个棋盘.在空板上调用此函数是编译时类型错误.

我认为可以做一些非常花哨的类型级编程.但即便如此,我也不认为刚刚参加了为期两天的函数式编程介绍的人可以知道它.还是我错过了什么?

更新

基于@ user2407038给出的示例和来自@Cirdec的说明,我写了这个,当你尝试takeBack在一个很棒的空板上时,它会产生编译时错误.

然而 - 稍微移动球门柱 - 这个技巧似乎有限.还有一个要求是你不能继续已经结束的游戏.

移动:采取一个井字板和位置并移动到该位置(如果没有占用)返回一块新板.此功能只能在空白或正在播放的电路板上调用.调用已完成的游戏板上的移动是编译时类型错误.

看起来似乎不是一个简单的技巧,可以在复杂逻辑的情况下使用移动,以确定游戏是否结束.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}

data N = S N | Z

data Stat
  = Empty
  | …
Run Code Online (Sandbox Code Playgroud)

haskell

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

PCRE重复基于捕获的数字 - (\ d)(.{\ 1})

1xxx      captures x
2xxx      captures xx
3xxx      captures xxx
Run Code Online (Sandbox Code Playgroud)

我想也许这个简单的模式可行:

(\d)(.{\1})
Run Code Online (Sandbox Code Playgroud)

但不是.

我知道在Perl中这很容易,但我在Julia中使用PCRE,这意味着很难嵌入代码来动态更改表达式.

regex perl pcre julia

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

在lisp中转置列表列表的安全方法?

转换列表很容易,但需要注意的是,不能超过call-arguments-limit.

http://www.lispworks.com/kb/4fbc798cb17237ca852566da005fcc79.html

当列表长度超过时,什么是一种安全的写入转置方式call-arguments-limit

例如,答案不是这个:https://stackoverflow.com/a/3513158/914859

(defun transpose (list-of-lists)
  (apply #'mapcar #'list list-of-lists))
Run Code Online (Sandbox Code Playgroud)

common-lisp

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