小编fre*_*fox的帖子

在Emacs中分析Shell命令

有没有一种方法可以分析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)

emacs shell profiler profiling

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

我的幺半群应该是左偏还是右偏?

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实例方法?

haskell

5
推荐指数
2
解决办法
155
查看次数

为什么Data.Tree.Tree没有Monoid实例?

我意识到答案可能是存在多个有效的此类实例(例如整数,求和,乘积...的情况)。也许有人比这个答案更令人满意?

正如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都可以使用相同的参数。在我看来,他们应该有这样的实例是很自然的。也许不是这样。我希望有人能启发我。

我想另一个原因可能是我为树提议的实例不是“有用的”。我认为这与多重有效实例参数一样令人不满意。

haskell

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

防止没有额外参数的`git stash` 运行

任何人都知道是否可以修改,git因此它只会拒绝git stash并要求我明确指定git stash push. 当我想检查藏匿处 ( git stash list)时,我经常发现自己不小心藏了东西。同样,如果我在索引中有东西然后做git stash(忘记添加--keep-index),那就很烦人了。这反过来又会产生灾难性的后果(如何在 git stash / git stash pop 之后恢复索引?)

git

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

我可以在`catch`中逃避`IO`

这是一个类型拼图给你.所以我们有

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).我希望能够捕获这个库可以在我称之为我提供的提升版本的地方抛出的一些函数.此外,当我捕获异常时,我想将它们重新抛入我自己的错误处理框架中.

haskell

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

通常确定数据类型的一致性

我想计算某类数据类型的“ 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。

haskell

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

实例声明中的类型变量的顺序

假设我有一个类型T a b,我想编写一个实例声明,例如Functor,范围的实例声明,a而不是 b.这可能没有定义newtype?

我读了haskell中多个类型变量的顺序是什么规则?这让我相信这是不可能的,但这对我来说似乎完全是武断的.

我希望的是:

instance Functor (T * b)
Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

haskell ×5

emacs ×1

git ×1

profiler ×1

profiling ×1

shell ×1