我想要一些像以下一样的东西:
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) 这有效:
? 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强迫所有的东西串起来,但我想我可以使用它.
我想写:
{-# 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一直在打击我
方法签名与类不匹配
问题:
一个简单的计划:
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) 有:
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 …
以下是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) 该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,这绝对不是<*>.
xInACircle的类型是(Functor m,Functor n)⇒(a→mb)→(a→nb)→(a→(m XInASquare n)b).提醒你什么?不是我.
我认为不可能(或需要某些语言扩展)来制作类似的功能
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) 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,这意味着很难嵌入代码来动态更改表达式.
转换列表很容易,但需要注意的是,不能超过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)