有没有一种方法可以分析emacs中对shell命令的阻塞时间?考虑以下程序:
(profiler-start 'cpu)
(shell-command "sleep 3")
(profiler-report)
(profiler-stop)
Run Code Online (Sandbox Code Playgroud)
探查器报告将如下所示:
- command-execute 371 95%
- call-interactively 371 95%
- funcall-interactively 329 84%
- execute-extended-command 175 44%
- execute-extended-command--shorter 157 40%
- completion-try-completion 149 38%
- completion--nth-completion 149 38%
- completion--some 143 36%
- #<compiled 0x438307f1> 143 36%
- completion-pcm-try-completion 102 26%
- completion-pcm--find-all-completions 98 25%
completion-pcm--all-completions 98 25%
+ completion-pcm--merge-try 4 1%
completion-basic-try-completion 41 10%
+ sit-for 16 4%
- eval-expression 154 39%
- eval 154 39%
- profiler-start 154 39% …Run Code Online (Sandbox Code Playgroud) monoid实例[a]是左偏.证明我的目标的一种方法是使用以下两个定义:
good ? Applicative f ? Semigroup (f ()) ? f ()
good = pure () <> good
bad ? Applicative f ? Semigroup (f ()) ? f ()
bad = bad <> pure ()
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以看到它good @[]是富有成效的,而不同bad @[]
.同样的问题可能会对性能(运行时和内存使用)产生类似的影响.所以我的问题是,是否有一个关于我是否应该将我的半群设计为左偏或右偏的一般指导原则?我认为在编写/使用Foldables 时应该考虑类似的事情
.也许这就是原因,既foldl和
foldr实例方法?
我意识到答案可能是存在多个有效的此类实例(例如整数,求和,乘积...的情况)。也许有人比这个答案更令人满意?
正如Joachim Breitner在此答案中的出色解释所示,如何在haskell中为该树实现monoid接口?任何应用程序都有一个monoid实例:
mempty :: Applicative f => Monoid a => f a
mempty = pure mempty
mappend :: Applicative f => Monoid a => f a -> f a -> f a
mappend f g = mappend <$> f <*> g
Run Code Online (Sandbox Code Playgroud)
所以我想知道为什么Data.Tree.Tree从containers没有这样的实例?如果没有伴随的monoid实例,则任何其他monad都可以使用相同的参数。在我看来,他们应该有这样的实例是很自然的。也许不是这样。我希望有人能启发我。
我想另一个原因可能是我为树提议的实例不是“有用的”。我认为这与多重有效实例参数一样令人不满意。
任何人都知道是否可以修改,git因此它只会拒绝git stash并要求我明确指定git stash push. 当我想检查藏匿处 ( git stash list)时,我经常发现自己不小心藏了东西。同样,如果我在索引中有东西然后做git stash(忘记添加--keep-index),那就很烦人了。这反过来又会产生灾难性的后果(如何在 git stash / git stash pop 之后恢复索引?)
这是一个类型拼图给你.所以我们有
catch
:: Exception e
=> IO a
-> (e -> IO a)
-> IO a
Run Code Online (Sandbox Code Playgroud)
我是否有可能IO在处理程序中安全逃脱.我对具有类似于以下内容的签名的函数感兴趣:
catchM
:: Exception e
=> MonadIO io
=> MonadError e io
=> IO a
-> (e -> io a)
-> io a
Run Code Online (Sandbox Code Playgroud)
这是明智的还是我看错了?
一些额外的上下文:我的问题是我正在使用一个抛出异常的库IO.我已经包装了一些这些功能并将它们提升到我自己的monad中(使用liftIO).我希望能够捕获这个库可以在我称之为我提供的提升版本的地方抛出的一些函数.此外,当我捕获异常时,我想将它们重新抛入我自己的错误处理框架中.
我想计算某类数据类型的“ arity” 。即具有单个构造函数和一定数量字段的数据类型。例如data T a = T Int () String a。然后,“ arity”将是字段数。对于T a这将是4。我设想一个带有如下签名的函数:
forall a . C a => Int
Run Code Online (Sandbox Code Playgroud)
对于一些适当的选择C。我知道如果我有Generic a某种类型的话,a我会得到from :: a -> Rep a x,但是请注意,这将需要一个具体的值a,我对静态地进行计算很感兴趣。这有可能吗?我也考虑过了Typeable,但是我不太了解API。
假设我有一个类型T a b,我想编写一个实例声明,例如Functor,范围的实例声明,a而不是 b.这可能没有定义newtype?
我读了haskell中多个类型变量的顺序是什么规则?这让我相信这是不可能的,但这对我来说似乎完全是武断的.
我希望的是:
instance Functor (T * b)
Run Code Online (Sandbox Code Playgroud)