小编Ser*_*bov的帖子

用`Parsec`解析各种二元函数链的正确方法?

确实Parsec具有chainlchainr解析左关联或右关联操作链(即a -> a -> a)。所以我可以很容易地x + y + z以 a((a + y) + z)(a + (y + z))方式解析某些东西。

然而,

  1. 在以下情况下没有解析a -> b -> c 函数和特定情况的标准方法a = ba -> a -> c例如a = b = c认为是比较函数 ( a -> a -> Bool);
  2. 没有标准的方法来实现一个操作的“重要性”:例如a + b = b + a应该被解析为((a + b) = (b …

parsing haskell parsec operator-precedence associativity

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

在 Haskell 标准库的帮助下重构这样的虚拟代码的最佳方法是什么?

我目前正在处理用 Haskell 编写的相当肮脏的项目。它包含很多代码,例如:

try_parse_parameters (p:ps) kvps options = 
        let maybeKvp = try_parse_kvp p 
        in
          if isJust maybeKvp 
            then try_parse_parameters ps ((fromJust maybeKvp) : kvps) options
            else 
              let maybeOption = try_parse_option p
              in 
                if isJust maybeOption
                  then try_parse_parameters ps kvps ((fromJust maybeOption) : options)
                  else try_parse_parameters ps kvps options
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:是否有一些标准方法来处理这种情况?

refactoring haskell

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

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

我很难弄清楚发生了什么。

以下是我gdb在深入研究 Linux 时在会议printfn中看到的内容stdio.h

#1 0x00007ffff7ddb81f in __printf (format=) at ./st
dio-common/printf.c:33

第 488 章

第489章 39美元=(无效*)0x7ffff798fff8

到目前为止,一切都很好。

让我们进入下一个调用(即__vfprintf_internal),看看 %rbp 会是什么:

(gdb) p $rbp

第504章 41美元=(无效*)0x7ffff7f95780< IO_2_1_stdout

两个值之间的差异是6313864字节。这怎么可能?怎么了?!

PS 我明确使用-fno-omit-frame-pointer来确保 %rbp 保存。

linux assembly gcc x86-64

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

了解Haskell的( - >)?

(->)在学习"高级"Haskell的过程中几次看到. ghci当我试图跑步时失败:t (->),有时甚至认为官方文档使用这种表示法.

据我猜测,(->)任何在射Hask -基本上,任何哈斯克尔功能.我假设想法是修复源或目标端点:例如,((->) Int)可能意味着该Int类型的任何函数; 显然,(Int (->))意味着来自的任何功能Int.

接下来的假设是(->)可能是一个endofunctor.fmap实现看起来非常简单:拥有类型a和态射的固定端点,f :: a -> b可以生成一个实例((->) b).它保留id并且不会破坏现有的组合物:即fmap(g . f) = fmap(g) . fmap(f).

所以我的第一个问题是:我是对的吗?

我的第二个问题是为什么然后:t (->)失败ghci呢?

我的第三个问题是我可以(->)在真正的Haskell代码中使用吗?我需要启用一些{{ #Pragma ...扩展吗?或者它只是用于解释概念的理论概念,仅此而已?

最后,最后一个问题.是否(<-)存在双重概念?

haskell

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

将`Functor`类概括为``MultiFunctor`?

我正在学习" 免费应用程序 ".当然,我要问的问题是关于论文的主要思想,但仍然......

......在第6页上,有一种尝试概括FunctorMultiFunctor:

class Functor f ? MultiFunctor f where
    fmap0 :: a ? f a
    fmap1 :: (a ? b) ? f a ? f b
    fmap1 = fmap
    fmap2 :: (a ? b ? c) ? f a ? f b ? f c
    ...
Run Code Online (Sandbox Code Playgroud)

我无法从类别理论的观点看出这个定义是如何合理的:fmap2似乎只是一个bifunctor,即在产品类别上定义的仿函数.根据定义,产品类别由所有可能的有序对象对给出,而态射也是对,因此:fmap2 :: (a -> a', b -> b') -> (f a, f b) -> (f a', f b')外观和感觉更合适的签名.

我可以理解这种(a -> b …

haskell functor applicative

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

外部依赖,Haskell,堆栈:我应该修改一些东西还是'import'假设足够了?

我对Haskell和堆栈都很新.

import Data.Set
import Data.Stack
Run Code Online (Sandbox Code Playgroud)

上述语句触发编译错误:Could not find module 'Data.Set'. Perhaps you meant 'Data.Int'.我试图谷歌,发现没有类似的东西.

因此,我的问题是:我是否需要手动指定外部依赖项或仅仅是我的stack build命令,为什么无法从某个缓存或存储库中获取适当的模块?

如果我必须手动指定我的依赖项,我应该更喜欢.cabal.yaml?处理版本控制的正确方法是什么?

haskell dependency-management haskell-stack

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