通常当我使用可视模式时,我想将选择扩展到整个文件.但是击中VG会把我带到最后一行的第一个角色.我想把它带到我使用该命令之前的最后一行的同一列.有没有一种简单的方法来实现这一目标?我可以使用200000j那个或者什么,但那不是太优雅.谢谢.
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表达式之前带有关键字的版本似乎只是方便的快捷方式.
我对吗?
我要地图j k的邪恶运动是gj和gk分别.这是人们通常在vim中做的常见重映.我怎么能在Emacs中做到这一点.我想我只需要找到这些对应于gj和gk运动的邪恶函数是如何命名的.
我遇到过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在第二个外部和内部,我怀疑是关键在这里.如果我在推理的某个地方出错了,请帮我展示一下这个和/或纠正我.
我正在实现一个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) 我正在尝试实现以下内容:复制当前选定的区域或一行(如果没有选择)并在帮助下注释掉原始区域comment-or-uncomment-region-or-line.
我想我可以使用kill-region后跟,yank但后来我的原始选择丢失了,所以我无法发表评论.另一方面,如果我先发表评论,我会将我所在地区的两份副本都注释掉.
我有的另一个想法(我认为更好,因为我使用邪恶模式)是使用evil-yank然后evil-visual-restore恢复选择,以便我可以评论它.但我无法确定要传递给哪些参数evil-yank来指定所选区域.
我在这里错过了什么?
我试图了解如何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) 说我有以下功能:
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在这种情况下使用了哪种优化,以及它如何展开这个表达式?
我试图突出显示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的第二表达式使得它不工作了.这是为什么?
我注意到在以下示例中:
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)