小编mb1*_*b14的帖子

如何自定义diff git以忽略码数日期生成

我正在用院子来生成我项目的文件.即使认为文档可以生成,因此不需要进行版本化,我们决定这样做,因为它可以更容易地看到代码(注释)在实际文档中的变化的影响.

问题是每个时间段生成文档,它会更改每个文件开头的日期,导致所有文件被视为已更改.

有没有办法告诉git忽略那些行来检测文件是否已经改变,或者是一种方法来配置码不重新生成文件,如果它们是相同的?

谢谢

更新

我知道我可以做一个脚本或其他什么,如果只有日期改变了,它会清理文件.所以我的问题是有一种Git方法可以做.我应该阅读有关diff驱动程序的内容,还是应该使用干净的脚本.

如果我要走向清理路径,那么使用git hook或将其集成到doc生成中会更好.

最终,我对跟踪由于生成的doc中的特定提交而导致的更改的任何其他方式感兴趣.

我还没有真正解释我的问题是什么(以及为什么我要尝试编写不需要的东西)所以我们去了.

有时,代码中的一点修改搞砸了文档,因此我将能够看到提交对文档的影响.

示例:我使用modeline for vim(文件第一行的注释告诉vim不同的信息)

知道我有一个包含模块文档的文件

#vi: my vim setting 
# Documentation of module A
module A
  .... some code

end
Run Code Online (Sandbox Code Playgroud)

在其他地方我使用这个模块

#vi : my vim setting

           ( 2 blank lines)
module A
   .... some different code
end
Run Code Online (Sandbox Code Playgroud)

那时,一切都很好,A的文档就是Documentation of module A.但是如果某个人(像我一样)删除了最后一个文件中的空白行并且只留下一行(是的,我在模式行和代码之间放了2个空行),那么院子认为模式行是模块A的文档vi : my vim setting.

问题是,除了查看每一页之外,没有办法检测到文档被搞砸了.使用git,我可以快速查看并检查更改的内容,甚至可以找到什么时候(这很重要,因为那时我可以弄清楚它为什么会发生变化).

git yard

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

在Haskell中对地图进行硬编码的最有效方法是什么?

我想在Haskell中硬编码地图.我至少可以看到三种方法:

这是最有效的方法吗?一种解决方案比其他解决方案更快,为什么?前两个解决方案是否相同?(编译器会生成相同的代码吗?)推荐的方法是什么(更容易阅读)?

(注意我Int在我的例子中使用,但这不是必需的.键也可能是Strings,所以我对这两种情况都很感兴趣.)

haskell

6
推荐指数
2
解决办法
409
查看次数

如何在Haskell中连接幻像类型中的元组?

我正在编写一个SQL组合器,它允许将SQL片段组成一个Monoid.我有一个这样的类型(这是一个简化的实现):

data SQLFragment = { selects :: [String], froms :[String], wheres :: [String]}

instance Monoid SQL Fragment where ...
Run Code Online (Sandbox Code Playgroud)

这允许我轻松地结合我经常使用的SQL,并执行以下操作:

email = select "email" <> from "user" 
name  = select "name" <> from "user"
administrators = from "user" <> where_ "isAdmin = 1"

toSql $ email <> name <> administrators
=> "SELECT email, name FROM user WHERE isAdmin = 1"
Run Code Online (Sandbox Code Playgroud)

这非常有效,我很满意.现在我使用MySQL.Simple并执行它需要知道行的类型.

main = do
       conn <- SQL.connect connectInfo
       rows <- SQL.query_ conn $ toSql (email <> name <> …
Run Code Online (Sandbox Code Playgroud)

haskell hlist

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

并行声明函数是个好主意吗?

回答这个问题,我意识到Haskell允许你在声明函数时解构对象并使用它来做并行函数定义.

基本上,让我们想象我想做这样的事情

 a = (1+)
 b = (2+)
 c = (3+)
 d = (4+)
 e = (5+)
Run Code Online (Sandbox Code Playgroud)

什么是DRYest写它的方式?我的意思是,毕竟模式是相同的:函数的名称既不能猜到要添加的数量,但我应该能够避免+每次都写(当然不使用模板Haskell).

基本上,我希望能够使用map或类似的东西,它似乎map只是工作!

[a,b,c,d,e] = map (+) [1..5]
Run Code Online (Sandbox Code Playgroud)

瞧瞧!

这更短,也许更具表现力,它的工作原理:

> a 10
11
> b 10
12
etc ...
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这是一个很好的模式(在那种情况下),如果没有,哪些是退缩(我知道购买经验,相当于Ruby是一个噩梦,但原因似乎没有适用于Haskell)?

更新

我理解这些代码的可读性是主观的,可以看作是基于意见的.但是,可能有一些客观原因不这样做.例如,在Ruby(至少1.8)中,使用的方法define_method 对于大多数IDE和标记构建器是不可见的.而且,你不能使用调试器等进入它们......这使得它们在实践中非常不方便.我在Haskell问类似的原因

haskell metaprogramming

6
推荐指数
2
解决办法
293
查看次数

如何解决类型族中的冲突实例?

我正在尝试做一个'UnMaybe'类型系列,但它没有编译(实例族冲突).

这是我的代码

{-# LANGUAGE TypeFamilies #-}

type family UnMaybe a :: *

type instance UnMaybe (Maybe a) = a
type instance UnMaybe a = a
Run Code Online (Sandbox Code Playgroud)

错误信息

test.hs:4:16:
    Conflicting family instance declarations:
       type instance UnMaybe (Maybe a)
       -- Defined at test.hs:4:16
       type instance UnMaybe a
       -- Defined at test.hs:5:15
Run Code Online (Sandbox Code Playgroud)

我理解为什么它不起作用,无论如何还有另一种方法来实现相同的结果(或者激活它的扩展会允许它吗?)

haskell type-families

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

相当于红宝石......?在哈斯克尔

在ruby ?中允许在标识符的末尾允许类似的东西

如果do_something?做一点事

这允许不同的功能使bool从功能上做某事.

在Haskell中,显然类型签名告诉你这两个函数之间的区别,但有一个名称约定或命名模式来命名bool或选项吗?

在我的情况下,我想根据选项的值(作为参数传递)生成(或不生成)一些标签.

明显的代码是

generate options = do
     when (generateLabels? options) generateLabels
Run Code Online (Sandbox Code Playgroud)

但由于generateLabels?无效名称,我怎么称呼它?

haskell naming

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

IO Monad中的短路和

我知道问题已被问到,但我不敢相信没有直接的答案.

我理解在(&&)中隐藏副作用是不好的,但在我的情况下,副作用只是在检查过时的世界(存在文件,检查修改时间等,询问用户是/否的问题) .

那么haskell的方法是什么样的,所以如果cond1为false,则不执行cond2.

cond1, cond2 :: IO bool


main = do
   cond <- liftM2 (&&) con1 con2
   if cond
   then   result1
   else   result2
Run Code Online (Sandbox Code Playgroud)

我期待类似cond <- all [con1, con2]或相当的东西,但我找不到任何东西.

更新

我可以看到很多手动解决方案.我仍然感到疑惑,这个功能在某处并不存在.lazzy评估的一个优点是它不仅&&像C中的硬编码那样短路.在命令式模式下,Haskell甚至不能短路,这真的很奇怪&&.虽然,所有解决方案都以某种方式使用,如果短路评估.有没有办法制作通用的lazzy liftM2

haskell

6
推荐指数
2
解决办法
499
查看次数

为什么cabal安装会重新编译构建的内容?

为什么当我这样做cabal build,然后cabal install,阴谋重新编译的事情两次.(我正在使用沙箱).

更新

为了澄清,我问在做什么之后cabal build(我理解编译我的文件的2个版本),为什么要再做cabal install一次编译.这不是build建立的目的吗?

UPDATE2

好吧,似乎在两个不同的目录来编译distdist/sandbox-... 就是在两者之间有什么区别?

> cabal build
Building cache-0.1.0.0...
Preprocessing executable 'cache' for cache-0.1.0.0...
[1 of 1] Compiling Main             ( main.hs, dist/build/cache/cache-tmp/Main.o )
Linking dist/build/cache/cache ...

> cabal install
Warning: The package list for 'hackage.haskell.org' is 60 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Configuring cache-0.1.0.0...
Warning: The 'license-file' field refers to the …
Run Code Online (Sandbox Code Playgroud)

haskell cabal

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

使用堆栈进行分析

我正在尝试使用进行一些分析stack --enable-profiling,但我对究竟发生了什么感到有些困惑。

我还需要使用--enable-library吗?。另外,它是否在单独的目录中构建?接下来我构建它会发生什么,会记住我是处于分析模式还是必须一直使用--enable-profiling

通常建议结合-O2选项进行分析。是否--enable-profiling自动设置?

haskell haskell-stack

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

有没有一种方法可以从haskell数据类型生成dhall模式?

我正在尝试使用dhall重写Haksell应用程序中使用的BIG Yaml配置文件。为此,我使用的json-to-dhall是需要SCHEMA的类型,即重排表达式的类型。问题是实际架构几乎不可能手动编写,因为它涉及很多求和类型(和嵌套求和类型)。我尝试通过将yaml的某些部分手动转换为dhall并运行来生成模式dhall type。这给出了我可以使用的架构jston-to-dhall后来。这适用于简单类型,但是现在我面临着(工会)工会的问题。Dhall需要类型注释来写入我用来生成类型的文件...所以我想知道是否有一种方法(使用工具或修改我的haskell应用程序)将Haskell数据转储到正确的dhall文件或至少从Haskell类型生成模式。

haskell dhall

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