小编Van*_*uel的帖子

有一种简单的方法可以在Ruby中进行多行缩进字符串吗?

说我希望有一个非常大的漂亮打印的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)

ruby string

19
推荐指数
3
解决办法
2万
查看次数

为什么GHC让修复如此混乱?

看一下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)

所以现在我有两个问题:

  1. 如何X真的来临意味着修复X中的第一个定义?
  2. 在第二个定义中使用第一个定义是否有任何优势?

recursion haskell fixpoint-combinators

15
推荐指数
4
解决办法
767
查看次数

Map.lookup的Maybe结果不是我的Monad Transformer堆栈的类型检查

我将通过以下论文:Monad Transformers Step by Step.在第2.1节"转换为一元样式",一个函数转换为返回ValueEval1单子.这部分功能对我来说没有意义:

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.

谢谢!

monads dictionary haskell monad-transformers maybe

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

haskell中的固定长度循环缓冲区

我想在Haskell中创建一些常规类型的固定长度循环缓冲区.缓冲区中的项目需要在物理内存(非链接列表)中一个接一个地定位.我想要这个特定的结构,因为它将提高所有数据一起到达CPU上的L2缓存的机会.我已经了解了Haskell如何允许新的数据类型,但是看起来使用"数据"创建的类型更多的是使用模式匹配和相关方法来美化c结构.是否有可能在Haskell中完全创建如上所述的低级数据结构.

haskell

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

为什么GHC有时会拒绝懒惰?

这在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)

haskell

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

GHC 7.0.4似乎忘记了如何应用仿函数

在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)

haskell functor

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

JavaScript可以在window.open上设置mime类型

我想在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)

javascript mime-types

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

GHCi环境转储

GHCi中有没有办法基本上获得州转储?我的意思是列表:

  • 所有加载的运算符以及它的优先级,关联性和签名.
  • 所有加载的类.
  • 所有已加载的数据,类型和新类型以及它们所属的类.
  • 所有加载的函数都带有它的签名,如果它们属于它们所属的类.

假设这是可能的,是否也可以在运行时执行此操作,例如在异常期间?

haskell ghci

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

nubBy没有按预期工作

下面的函数应该生成素数,但不适用于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)

奇怪的是,它似乎在这个网站上工作正常:

rextester.com/LWZCQ71376

haskell

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

如何通过每次传入重置的超时来管道?

withTimeout功能是假设管道ConsoleEventCeTimeout发送的每一个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)

concurrency haskell haskell-pipes

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