说我希望有一个非常大的漂亮打印的html代码段与我的ruby代码内联.什么是最干净的方法来做到这一点,而不会丢失我的字符串中的任何格式或不得不记住某种gsub正则表达式.
将它们编码为一行很容易,但很难阅读:
1.times do
# Note that the spaces have been changed to _ so that they are easy to see here.
doc = "\n<html>\n__<head>\n____<title>\n______Title\n____</title>\n__</head>\n__<body>\n____Body\n__</body>\n</html>\n"
ans = "Your document: %s" % [doc]
puts ans
end
Run Code Online (Sandbox Code Playgroud)
ruby中的多行文本更容易阅读,但字符串不能与其余代码一起缩进:
1.times do
doc = "
<html>
<head>
<title>
Title
</title>
</head>
<body>
Body
</body>
</html>
"
ans = "Your document: %s" % [doc]
puts ans
end
Run Code Online (Sandbox Code Playgroud)
例如,以下是我的代码缩进,但字符串现在每行前面有四个额外的空格:
1.times do
doc = <<-EOM
<html>
<head>
<title>
Title
</title>
</head>
<body>
Body
</body>
</html>
EOM
ans …Run Code Online (Sandbox Code Playgroud) 看一下GHC源代码,我可以看到修复的定义是:
fix :: (a -> a) -> a
fix f = let x = f x in x
Run Code Online (Sandbox Code Playgroud)
在一个示例中,修复程序使用如下:
fix (\f x -> let x' = x+1 in x:f x')
Run Code Online (Sandbox Code Playgroud)
这基本上产生了一个数字序列,它们增加1到无穷大.为了实现这一点,修复必须将它接收的函数作为它的第一个参数直接回到该函数.我不清楚上面列出的修复定义是如何做到的.
这个定义是我如何理解修复的工作原理:
fix :: (a -> a) -> a
fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)
所以现在我有两个问题:
我将通过以下论文:Monad Transformers Step by Step.在第2.1节"转换为一元样式",一个函数转换为返回Value在Eval1单子.这部分功能对我来说没有意义:
eval1 env (Var n) = Map.lookup n env
Run Code Online (Sandbox Code Playgroud)
然而,结果将是Maybe Value函数的类型签名是:
eval1 :: Env ? Exp ? Eval1 Value
Run Code Online (Sandbox Code Playgroud)
该函数无法键入检查,错误对我来说似乎很明显.然而,作者明确指出这将有效:
... Var的情况不再需要一个fromJust调用了:原因是Map.lookup被定义为只需调用monad的失败函数就可以在任何monad中工作 - 这非常适合我们的monadic公式.
Map.lookup的签名看起来不像是用于任何monad:
lookup :: Ord k => k -> Map k a -> Maybe a
Run Code Online (Sandbox Code Playgroud)
这篇论文是否已过时或者我遗失了什么?如果论文实际上已经过时,为什么lookup改为只能使用Maybe.
谢谢!
我想在Haskell中创建一些常规类型的固定长度循环缓冲区.缓冲区中的项目需要在物理内存(非链接列表)中一个接一个地定位.我想要这个特定的结构,因为它将提高所有数据一起到达CPU上的L2缓存的机会.我已经了解了Haskell如何允许新的数据类型,但是看起来使用"数据"创建的类型更多的是使用模式匹配和相关方法来美化c结构.是否有可能在Haskell中完全创建如上所述的低级数据结构.
这在tryhaskell.org上进入无限循环.我不知道为什么.
last $ filter (<100) $ [2..] >>= (\a -> if 0 == (length $ filter (== 0) $ map (mod a) $ [2..a-1]) then (return a) else [])
Run Code Online (Sandbox Code Playgroud) 在Learn You A Haskell的"Functors,Applicative Functors and Monoids"一章中,Miran执行以下操作:
ghci> (pure 3) "blah"
3
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个:
ghci> (pure 3) "blah"
<interactive>:1:2:
No instance for (Functor ((->) [Char]))
arising from a use of `pure'
Possible fix:
add an instance declaration for (Functor ((->) [Char]))
In the expression: (pure 3) "blah"
In an equation for `it': it = (pure 3) "blah"
Run Code Online (Sandbox Code Playgroud)
我不确定会发生什么.到目前为止,所有示例都正常工作.我一定不能进口东西,但我不知道是什么.
这是我的版本信息:
$ ghci -v
GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help
Glasgow Haskell Compiler, Version 7.0.4, for Haskell 98, stage 2 booted by …Run Code Online (Sandbox Code Playgroud) 我想在Javascript中打开一个调试窗口.Javascript将通过调试窗口传递JSON字符串,JSONView(Chrome扩展程序)应以格式良好的方式显示.
为此,MIME类型必须为" application/json".是否可以将mime类型和JSON字符串window.open作为参数发送一些如何?我认为必须在window.open上设置MIME类型和内容,否则JSONView将不会被触发.
我试过这个,但它不起作用:
var x = window.open("about:blank", 'x');
var doc = x.document;
doc.open("application/json");
doc.write($(".trend_chart").attr("data-trendChart"))
Run Code Online (Sandbox Code Playgroud) GHCi中有没有办法基本上获得州转储?我的意思是列表:
假设这是可能的,是否也可以在运行时执行此操作,例如在异常期间?
下面的函数应该生成素数,但不适用于GHC 7.10.2.还有其他人看到这个吗?
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelude> import Data.List
Prelude Data.List> print . take 100 . nubBy (\x y -> x `rem` y == 0) $ [2..]
[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它似乎在这个网站上工作正常:
该withTimeout功能是假设管道ConsoleEvent与CeTimeout发送的每一个s :: Int,如果没有已收到秒.相反,它无法CeTimeout在适当的时间发送事件.CeTimeout如果s在原始事件丢失的情况下超过秒数,则会将一个事件替换为其他事件.而不是一个CeTimeout事件,它应该是已经过的每个第二个周期的计数n*s CeTimeout事件.错误在哪里,纠正是什么?谢谢!ns
withTimeout :: (MonadIO t) => Int -> Pipe ConsoleEvent ConsoleEvent t ()
withTimeout ((* 1000000) -> s) = join . liftIO $ work
where
work :: (MonadIO t) => IO (Pipe ConsoleEvent ConsoleEvent t ())
work =
do
(oSent, iKept) <- spawn $ bounded 1
(oKept, iSent) <- spawn $ unbounded
(oTimeout, iTimeout) <- spawn $ …Run Code Online (Sandbox Code Playgroud) haskell ×8
concurrency ×1
dictionary ×1
functor ×1
ghci ×1
javascript ×1
maybe ×1
mime-types ×1
monads ×1
recursion ×1
ruby ×1
string ×1