我正在阅读Monad教程,而我现在正在阅读的是http://www.muitovar.com/monad/moncow.xhtml,但我遇到了Monad状态的问题,或者更多精确的runState访问器功能.
类型定义为
newtype State s a = State { runState :: (s -> (a,s)) }
Run Code Online (Sandbox Code Playgroud)
它被称为例如
runState (chncasewst3 'e' 'd' 'f') False
Run Code Online (Sandbox Code Playgroud)
我不知道如何阅读第二行的定义,特别是因为"State s a"部分.如果它在"陈述一个s"的地方,我可以推断出访问者已经被'cur''与's'相提并论.
所以问题是; 如何读取类型定义,以便在这种情况下我可以看到如何调用访问器函数,如果可能的话,如何读取访问器函数本身.
在这一点上,这完全是理论上的,但我一直在努力解决这个问题.我们以客户为例.每个连接都有forkIOd线程,其中一个想要退出整个程序(即./exit).这些信息将如何传播到其他线程?
这不是一个条件,但我假设线程正在从各自阻塞的线程中读取.因为他们在为他们写的东西之前一直闲着,所以他们不能轮询任何类型的"完成"变量.所以我的第一个想法unless done就是闷闷不乐.
我对任何程序都没有解决方案,因此任何为任何语言提供解决方案的人都会受到赞赏,但真正的问题是如何在Haskell中完成.
我正在尝试做以下事情,但要么我太累了又无法思考,或者有些奇怪的事情正在逃避:
scanimage -L | gawk '/N650U/ {print gensub("[\'`]", "", "g", $2)}'
pipe bquote>
Run Code Online (Sandbox Code Playgroud) 我一直是控制台 vim 用户,但最近我尝试使用 gvim。我已经进行了一些设置,这样我的控制台习惯就不会受到影响,例如使用 .
然而,用我的上网本打开多个 gvim 和终端是可怕的,很快我的 vim 空间就减少到一两厘米。充其量,窗口宽度减半,从而无法垂直分割屏幕(平铺 wm)。
我通过将 vim 别名化来解决这个问题,gvim --remote-silent并且它工作了几天,但今天我需要使用 -c '' 并意识到在 --remote-silent 后面有任何开关都会将这些开关作为文件打开。这样gvim --remote-silent --foo bar会打开两个文件:--foo 和 bar。
我为 放置了一个新别名alias vim=gvim,但我担心这会让我再次成为控制台 vim 用户,比我想象的要早。
所以问题是,以最小的努力(设置系统可能很费力)继续使用 gvim 的首选方法是什么,这样我仍然可以继续使用 vim 的全部功能。该解决方案不需要使用远程 vim,它应该只是最小化 gvim 窗口。
我有以下代码片段,它编译得很好,但是当我尝试运行它时,我从cmdargs收到错误.*** Exception: System.Console.CmdArgs.Implicit, unexpected flag (edit): Main.Sel.如果我将Sel更改为Int,它可以工作,但在我的实际用例中,我希望使用类型强制来区分选项和Ints.
我可以通过使用带有cmdargs的Int并在检查将其转换为Sel的参数后修复它,但我认为这是次优的解决方案.
{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
import System.Console.CmdArgs
import System.Console.CmdArgs.Default
newtype Sel = Sel Int deriving (Num, Real, Integral, Show, Read, Data, Typeable, Enum, Eq, Ord, Default)
data Foo = Foo {
edit :: Sel
} deriving (Show, Read, Data, Typeable)
foo = Foo {
edit = def
}
main = do
a <- cmdArgs foo
print a
Run Code Online (Sandbox Code Playgroud) 可能重复:
什么是PHP嵌套函数?
PHP允许嵌套函数声明,如下所示:
function foo() {
function bar() {
return "bar";
}
return "foo";
}
Run Code Online (Sandbox Code Playgroud)
但这种语法的用例是什么?内部bar被放到全局命名空间中,所以它不是垃圾收集的,可以从外部函数外部使用,并提供很多混淆和可能的错误.例如,调用foo两次会导致错误,除非您将声明包装在一个if(!is_callable('bar')).
使用嵌套声明来创建条件声明也不好,因为它会产生混淆."为什么它抱怨没有这样的功能,当它在那里工作得很好?!?!".
我正在阅读HAMT,并查看了无序容器中的参考实现,但注意到它们有自己的数组实现.为什么是这样?是速度吗?或者它是否需要一些自定义API?