我正在用院子来生成我项目的文件.即使认为文档可以生成,因此不需要进行版本化,我们决定这样做,因为它可以更容易地看到代码(注释)在实际文档中的变化的影响.
问题是每个时间段生成文档,它会更改每个文件开头的日期,导致所有文件被视为已更改.
有没有办法告诉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,我可以快速查看并检查更改的内容,甚至可以找到什么时候(这很重要,因为那时我可以弄清楚它为什么会发生变化).
我想在Haskell中硬编码地图.我至少可以看到三种方法:
使用多个方程式:
message 200 = "OK"
message 404 = "Not found"
...
Run Code Online (Sandbox Code Playgroud)使用case表达式:
message s = case s of
200 -> "OK"
404 -> "Not found"
Run Code Online (Sandbox Code Playgroud)实际上使用了Map.
这是最有效的方法吗?一种解决方案比其他解决方案更快,为什么?前两个解决方案是否相同?(编译器会生成相同的代码吗?)推荐的方法是什么(更容易阅读)?
(注意我Int在我的例子中使用,但这不是必需的.键也可能是Strings,所以我对这两种情况都很感兴趣.)
我正在编写一个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允许你在声明函数时解构对象并使用它来做并行函数定义.
基本上,让我们想象我想做这样的事情
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问类似的原因
我正在尝试做一个'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)
我理解为什么它不起作用,无论如何还有另一种方法来实现相同的结果(或者激活它的扩展会允许它吗?)
在ruby ?中允许在标识符的末尾允许类似的东西
如果do_something?做一点事
这允许不同的功能使bool从功能上做某事.
在Haskell中,显然类型签名告诉你这两个函数之间的区别,但有一个名称约定或命名模式来命名bool或选项吗?
在我的情况下,我想根据选项的值(作为参数传递)生成(或不生成)一些标签.
明显的代码是
generate options = do
when (generateLabels? options) generateLabels
Run Code Online (Sandbox Code Playgroud)
但由于generateLabels?无效名称,我怎么称呼它?
我知道问题已被问到,但我不敢相信没有直接的答案.
我理解在(&&)中隐藏副作用是不好的,但在我的情况下,副作用只是在检查过时的世界(存在文件,检查修改时间等,询问用户是/否的问题) .
那么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?
为什么当我这样做cabal build,然后cabal install,阴谋重新编译的事情两次.(我正在使用沙箱).
为了澄清,我问在做什么之后cabal build(我理解编译我的文件的2个版本),为什么要再做cabal install一次编译.这不是build建立的目的吗?
好吧,似乎在两个不同的目录来编译dist和dist/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) 我正在尝试使用进行一些分析stack --enable-profiling,但我对究竟发生了什么感到有些困惑。
我还需要使用--enable-library吗?。另外,它是否在单独的目录中构建?接下来我构建它会发生什么,会记住我是处于分析模式还是必须一直使用--enable-profiling。
通常建议结合-O2选项进行分析。是否--enable-profiling自动设置?
我正在尝试使用dhall重写Haksell应用程序中使用的BIG Yaml配置文件。为此,我使用的json-to-dhall是需要SCHEMA的类型,即重排表达式的类型。问题是实际架构几乎不可能手动编写,因为它涉及很多求和类型(和嵌套求和类型)。我尝试通过将yaml的某些部分手动转换为dhall并运行来生成模式dhall type。这给出了我可以使用的架构jston-to-dhall后来。这适用于简单类型,但是现在我面临着(工会)工会的问题。Dhall需要类型注释来写入我用来生成类型的文件...所以我想知道是否有一种方法(使用工具或修改我的haskell应用程序)将Haskell数据转储到正确的dhall文件或至少从Haskell类型生成模式。