小编egd*_*try的帖子

如何在保留光标下的当前列的同时在vim中转到文件的末尾?

通常当我使用可视模式时,我想将选择扩展到整个文件.但是击中VG会把我带到最后一行的第一个角色.我想把它带到我使用该命令之前的最后一行的同一列.有没有一种简单的方法来实现这一目标?我可以使用200000j那个或者什么,但那不是太优雅.谢谢.

vim

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

省略"forall"时,它们是否真的自动插入语句之前?

forall如果没有指定,很多文章和书籍都会在声明之前明确添加.例如

check :: (forall a. [a] -> Int) -> [b] -> [c] -> Bool
Run Code Online (Sandbox Code Playgroud)

实际上是

check :: forall b. forall c. (forall a. [a] -> Int) -> [b] -> [c] -> Bool
Run Code Online (Sandbox Code Playgroud)

我有一些问题因为Haskell使用currying我会想象最终的签名看起来像:

check :: (forall a. [a] -> Int) -> forall b. [b] -> forall c. [c] -> Bool
Run Code Online (Sandbox Code Playgroud)

为了清晰起见,添加了parens:

check :: (forall a. [a] -> Int) -> (forall b. [b] -> (forall c. [c] -> Bool))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,forall表达式之前带有关键字的版本似乎只是方便的快捷方式.

我对吗?

haskell types

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

如何在Emacs Evil-mode中将j和k映射到gj和gk?

我要地图j k的邪恶运动是gjgk分别.这是人们通常在vim中做的常见重映.我怎么能在Emacs中做到这一点.我想我只需要找到这些对应于gjgk运动的邪恶函数是如何命名的.

emacs evil-mode

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

RunST阻止访问闭包中另一个有状态线程的引用

我遇到过RunST的Rank 2类型的许多解释,以及它如何阻止引用逃避RunST.但我无法找出为什么这也会阻止以下代码进行类型检查(这是正确的,但我仍然想了解它是如何做到的):

test = do v ? newSTRef True
          let a = runST $ readSTRef v
          return True
Run Code Online (Sandbox Code Playgroud)

相比:

test = do v ? newSTRef True
          let a = runST $ newSTRef True >>= ?v ? readSTRef v
          return True
Run Code Online (Sandbox Code Playgroud)

在我看来newSTRef,两种情况的类型相同:?s. Bool ? ST s (STRef s Bool).和类型v?s. STRef s Bool在这两种情况下,以及如果我的理解是正确的.但后来我很困惑,接下来该做什么,为什么第一个例子不进行类型检查,我没有看到两个例子之间的差异,除了在第一个例子中v被绑定runST在第二个外部和内部,我怀疑是关键在这里.如果我在推理的某个地方出错了,请帮我展示一下这个和/或纠正我.

monads haskell types

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

什么是在Haskell中处理延迟输入通道的惯用方法

我正在实现一个IRC机器人,因为我通过使用OpenSSL.Session连接SSL,我使用lazyRead函数从套接字读取数据.在连接的初始阶段,我需要按顺序执行几项操作:缺口协商,缺口服务器识别,加入渠道等)因此涉及一些状态.现在我想出了以下内容:

data ConnectionState = Initial | NickIdentification | Connected

listen :: SSL.SSL -> IO ()
listen ssl = do
  lines <- BL.lines `fmap` SSL.lazyRead ssl
  evalStateT (mapM_ (processLine ssl) lines) Initial

processLine :: SSL.SSL -> BL.ByteString -> StateT ConnectionState IO ()
processLine ssl line = do case message of
                            Just a -> processMessage ssl a
                            Nothing -> return ()
  where message = IRC.decode $ BL.toStrict line

processMessage :: SSL.SSL -> IRC.Message -> StateT ConnectionState IO ()
processMessage ssl …
Run Code Online (Sandbox Code Playgroud)

irc monads state haskell

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

Emacs同时复制区域/行和注释

我正在尝试实现以下内容:复制当前选定的区域或一行(如果没有选择)并在帮助下注释掉原始区域comment-or-uncomment-region-or-line.

我想我可以使用kill-region后跟,yank但后来我的原始选择丢失了,所以我无法发表评论.另一方面,如果我先发表评论,我会将我所在地区的两份副本都注释掉.

我有的另一个想法(我认为更好,因为我使用邪恶模式)是使用evil-yank然后evil-visual-restore恢复选择,以便我可以评论它.但我无法确定要传递给哪些参数evil-yank来指定所选区域.

我在这里错过了什么?

emacs elisp evil-mode

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

fmap fmap 如何应用于函数(作为参数)?

我试图了解如何fmap fmap适用于 say 之类的函数(*3)

的类型fmap fmap

(fmap fmap):: (Functor f1, Functor f) => f (a -> b) -> f (f1 a -> f1 b)
Run Code Online (Sandbox Code Playgroud)

类型(*3)

(*3) :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)

这意味着签名a -> a对应于f (a -> b),对吗?

Prelude> :t (fmap fmap (*3))
(fmap fmap (*3)):: (Num (a -> b), Functor f) => (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个简单的测试:

test :: (Functor f) …
Run Code Online (Sandbox Code Playgroud)

haskell types function functor function-composition

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

ghci使用什么优化技术来加速递归映射?

说我有以下功能:

minc = map (+1)
natural = 1:minc natural
Run Code Online (Sandbox Code Playgroud)

它似乎像这样展开:

1:minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc...
1:2:minc(minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc(1:minc...
1:2:minc(2:minc(2:minc(2:minc(2:minc(2:minc(2:minc(2:minc(2:minc(minc...
1:2:3:minc(3:minc(3:minc(3:minc(3:minc(3:minc(3:minc(3:minc(minc(minc...
...                                                                
Run Code Online (Sandbox Code Playgroud)

虽然它被懒惰地评估,但是要n在列表中构建每个新数字,必须展开表达n时间,这给我们带来了O(N^2)复杂性.但是通过执行时间,我可以看到真正的复杂性仍然是线性的!

Haskell在这种情况下使用了哪种优化,以及它如何展开这个表达式?

optimization haskell expression

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

Emacs显示不可见的符号(\n)

我试图突出显示Emacs中的几个不可见符号\n.我正在尝试以下方法:

(standard-display-ascii ?\n "¬\n")
(font-lock-add-keywords nil '(("¬" . font-lock-comment-face)))
Run Code Online (Sandbox Code Playgroud)

不幸的是,看起来只有明确键入的符号才会使用指定的font-face.有没有正确的方法来突出显示ascii符号?

还有一个相关的问题:更换nil'lisp-interaction-mode的第二表达式使得它不工作了.这是为什么?

emacs elisp

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

Data.Array的//运营商优先级

我注意到在以下示例中:

incrementByIndices :: Array Int Int -> [Int] -> Array Int Int
incrementByIndices arr indices = arr // zip indices (map (\i -> arr!i + 1) indices)
Run Code Online (Sandbox Code Playgroud)

zip不必被括号括起来.为什么会这样?:i (//)没有显示不同的优先级//所以我认为它是常规功能应用程序.为什么我没有类型检查错误说明zip不能成为//争论?

与之相反:

nub nub [1,2,3]
Run Code Online (Sandbox Code Playgroud)

arrays haskell types

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