小编So8*_*res的帖子

Python setuptools自定义配置

我正在打包一个Python模块,我希望用户能够使用一些自定义选项构建模块.具体来说,如果你为它提供了可以使用的某些可执行文件,它将会做一些额外的魔术.

理想情况下,用户会运行setup.py installsetup.py install --magic-doer=/path/to/executable.如果他们使用了第二个选项,我会在代码中的某处设置一个变量,并从那里开始.

这可能与Python有关setuptools吗?如果是这样,我该怎么办?

python setup.py

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

Haskell动态数据类型的更改

我有一些看起来像这样的haskell样板:

data Configuration
    { confA :: Integer
    , confB :: Boolean
    , confC :: String }

x = (\arg opt -> opt{ confA=arg })
y = (\arg opt -> opt{ confB=arg })
z = (\arg opt -> opt{ confC=arg })
Run Code Online (Sandbox Code Playgroud)

我想删除样板,产生以下内容:

setter :: (Config -> a) -> a -> Config -> Config
x = setter confA
y = setter confB
z = setter confC
Run Code Online (Sandbox Code Playgroud)

但我不知道如何构建这样的setter功能.这甚至可能在(非模板)haskell中,还是我在这里对抗语法糖?如果是这样,我将如何在模板haskell中做这样的事情?

haskell

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

拆除普通的haskell管道样板

我有一些非常常见的Haskell样板,它出现在很多地方.它看起来像这样(在实例化类时):

a <= b = (modify a) <= (modify b)
Run Code Online (Sandbox Code Playgroud)

像这样(具有正常功能):

fn x y z = fn (foo x) (foo y) (foo z)
Run Code Online (Sandbox Code Playgroud)

有时甚至是元组,如:

mod (x, y) = (alt x, alt y)
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种简单的方法来减少所有这些样板,而不必重复自己.(这些都是简单的例子,但确实很烦人).我想是为了删除这样的样板而创建的抽象,但我不确定它们被称为什么,也不知道在哪里看.任何haskellites可以指向我正确的方向吗?

haskell

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

仅当它与另一个正则表达式(Python)不匹配时才替换正则表达式

长话短说,我有两个正则表达式.一种模式匹配我想要替换的内容,另一种模式匹配那些不应替换的模式的特殊情况.举一个简单的例子,假设第一个是"\ {.*\}",第二个是"\ {\ {.*\} \}".然后应该替换"{this}",但不应该"{{this}}".是否有一种简单的方法来取一个字符串并说"用"hello"替换第一个字符串的所有实例,只要它不匹配第二个字符串"?

换句话说,有没有办法在不修改第一个字符串的情况下轻松制作"匹配第一个字符串而不是第二个字符串"的正则表达式?我知道我可以手动修改我的第一个正则表达式,从不匹配第二个正则表达式的实例,但是随着第一个正则表达式变得更加复杂,这变得非常困难.

python regex

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

如何链接ghc中的模块?

我有一个使用Data.Set和Data.IntMap的haskell程序,我需要什么标志才能让GHC将它链接到那些库中?简单的问题,我知道,但手册没有帮助我,我不知道在哪里看.

haskell ghc

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

Yaml分层数据

我想代表yaml的层次结构,我不确定如何.例如,我想说这样的话:

name: "user1"
programming-skill: 3
    java: 2
    python: 2
cooking-skill: 4
Run Code Online (Sandbox Code Playgroud)

当我在一个yaml解析器中抛出它时,我得到一个错误,就是"在这里不允许映射值"这一行,java: 2因为我正在尝试分配programming-skill给两个3和列表{java: 2, python: 2}.

在yaml中表示这种层次结构的最简洁方法是什么?或者,是否有比yaml更适合分层结构的序列化格式?

yaml

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

Haskell正则表达式语法

我在haskell的正则表达式有些麻烦.特别:

Prelude Text.Regex.Posix> "1" =~ "\d" :: Bool
<interactive>:1:10:
    lexical error in string/character literal at character 'd'
Prelude Text.Regex.Posix> "1" =~ "\\d" :: Bool
False
Prelude Text.Regex.Posix> "1" =~ "\\\\d" :: Bool
False
Run Code Online (Sandbox Code Playgroud)

难道哈斯克尔没有\d\s或其他类似的方便的逃逸代码?是的,我知道我可以做[0-9],但转义代码可以更加方便复杂的正则表达式.我错过了一些明显的东西吗?

regex haskell

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

Haskell monads和一个不需要字符串的失败

我有以下monad转换器来处理Haskell中的错误.

instance (Monad m, Error e) => Monad (EitherT e m) where
    return = EitherT . return . return
    m >>= k  = EitherT $ do
            a <- runEitherT m
            case a of
                Left  l -> return (Left l)
                Right r -> runEitherT (k r)
    fail = EitherT . return . Left . strMsg
Run Code Online (Sandbox Code Playgroud)

它运行得相当好,因为我可以Error使用自定义类进行实例化,并且具有非常灵活的方法来处理错误.

fail但是,有点傻,因为它是类型String -> EitherT e m,String限制可能是一种令人讨厌的创建错误的方法.我最终得到了很多:

instance Error BazError where
    strMsg "foo" = FooError -- oh look we have …
Run Code Online (Sandbox Code Playgroud)

monads haskell monad-transformers

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

说服编译器存在有效的实例链

行.这里的问题非常抽象.忍受我.

我有一堆"单位",每个单位都有一定的属性.这些属性在Seq类中定义,如下所示:

class Seq a x y where
    break :: x -> (a, y)
    build :: a -> y -> x
Run Code Online (Sandbox Code Playgroud)

从概念上讲,a类型是重要类型,x是用于生成的上下文a,y是用于生成任何其他Seq实例的上下文.break打破Seq,build让你重建它.

在个别Seq情况下,这很好.但是,我也有一个如下所示的数据构造函数:

data a :/: b = a :/: b deriving (Eq, Ord)
infixr :/:
Run Code Online (Sandbox Code Playgroud)

整个操作的目标是能够组合Seq实例.

例如,如果我有a,b并且c所有Seq这些a上下文的实例都被输入bb输入c,那么我应该自动拥有一个Seq实例a :/: …

haskell types

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

保证类型系列将派生某些类

我有以下内容:

{-# LANGUAGE TypeFamilies #-}

class Configuration c where
    data Pig c
    data Cow c

    parsePig :: GenParser Char st (Pig c)
    parseCow :: GenParser Char st (Cow c)

data Farm c =
    { pigs :: [Pig c]
    , cows :: [Cow c]
    } deriving Show
Run Code Online (Sandbox Code Playgroud)

由于这deriving Show条线,这失败了.我不知道如何强制所有Configuration实例确保它们data Pigdata Cow实现都是实例Show.

我知道我可以创造它showPigshowCow方法,并写出整个复杂的show实例,但实际上事情比这更复杂,这将是一个非常痛苦.

是否有一种简单,优雅的方法来保证类型族实例本身就是某些类的实例?

haskell type-families

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