小编sin*_*nan的帖子

Cabal破坏重新安装是否有解决方法?

和Cabal一起工作真是太累了,我拿着我最新工作的.cabal文件的副本,这样当其他一些软件包(特别是像hakyll这样需要永久重新安装的可执行文件)被破坏时,我可以从最新的保存点重新加载.

但它仍然没有使一些东西更容易,因为我不能安装一些包,而不是以不同的顺序完全安装我的包(即打破其他包的包应该安装在别人之前等)

例如,这是我尝试安装时会发生什么cabal-dev(对我来说这是一个非常重要的包):

?  ~  cabal install cabal-dev
Resolving dependencies...
In order, the following would be installed:
bytestring-0.9.2.1 (new version)
containers-0.4.2.1 (new version)
template-haskell-2.8.0.0 (reinstall) changes: containers-0.5.0.0 -> 0.4.2.1
text-0.11.2.3 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1
transformers-0.2.2.0 (new version)
mtl-2.0.1.0 (new version)
parsec-3.1.3 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1, mtl-2.1.2 ->
2.0.1.0
unix-2.3.2.0 (new version)
directory-1.0.0.3 (new version)
network-2.3.2.0 (new version)
HTTP-4000.2.6 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1, mtl-2.1.2
-> 2.0.1.0, network-2.4.0.1 -> 2.3.2.0
process-1.1.0.2 (reinstall) changes: directory-1.2.0.0 -> 1.0.0.3,
unix-2.6.0.0 …
Run Code Online (Sandbox Code Playgroud)

haskell cabal

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

最简单的方法来测试vim正则表达式?

我正在尝试编写一个vim语法文件,我正在处理的一个问题是vim的正则表达式语法与大多数其他语言不同(我认为一个名为"perl兼容正则表达式",Python,JavaScript等使用大多数相同的正则表达式语法)所以我不能使用像regexpal这样的正则表达式测试程序.

尝试vim正则表达式的最简单方法是什么?理想情况下我想要的是两个分割,一个是我写vim正则表达式,另一个是文本,匹配的部分应该突出显示.

提前致谢.

编辑:我添加了Ingo Karkat的修改版本的答案.vimrc:

nnoremap <F5> mryi":let @/ = @"<CR>`r
Run Code Online (Sandbox Code Playgroud)

此版本还将光标放回到按下F5时的位置,以及丢失标记的成本r.

regex vim vim-plugin

9
推荐指数
3
解决办法
6572
查看次数

如何使用GADT将字符串解析为语法树

我正在阅读这里的 GADT介绍,我发现限制程序员创建只有正确类型的语法树很好的想法,我把这个想法放到我的简单lambda演算解释器中,但后来我意识到我无法解析字符串到这个语法树,因为一个解析函数需要返回不同类型的语法树,具体取决于输入.这是一个例子:

{-# LANGUAGE GADTs #-}
data Ident
data Lambda
data Application

data Expr a where
    Ident :: String -> Expr Ident
    Lambda :: Expr Ident -> Expr a -> Expr Lambda
    Application :: Expr a -> Expr a -> Expr Application
Run Code Online (Sandbox Code Playgroud)

在使用GADT之前,我使用的是:

data Expr = Lambda Expr Expr
          | Ident String
          | Application Expr Expr
Run Code Online (Sandbox Code Playgroud)

GADT在这里很有优势,现在我无法创建无效的语法树Lambda (Application ..) ...

但是使用GADT,我无法解析字符串并创建解析树.以下是Lambda,Ident和Application表达式的解析器:

ident :: Parser (Expr Ident)
ident = ...

lambda :: Parser (Expr Lambda)
lambda = ... …
Run Code Online (Sandbox Code Playgroud)

haskell gadt

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

Coq - 理解`forall`语法

我正在通过阅读"使用依赖类型的认证编程"一书来学习Coq,而我在学习forall语法方面遇到了麻烦.

作为一个例子让我们考虑这种互感的数据类型:(代码来自书中)

Inductive even_list : Set :=
| ENil : even_list
| ECons : nat -> odd_list -> even_list

with odd_list : Set :=
| OCons : nat -> even_list -> odd_list.
Run Code Online (Sandbox Code Playgroud)

这个相互递归的函数定义:

Fixpoint elength (el : even_list) : nat :=
  match el with
  | ENil => O
  | ECons _ ol => S (olength ol)
  end

with olength (ol : odd_list) : nat :=
  match ol with
  | OCons _ el => S (elength el)
  end.

Fixpoint …
Run Code Online (Sandbox Code Playgroud)

coq

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

如何在Linux上测试自定义TCP实现?

出于学习目的,我正在实施TCP(现在只是RFC 793),但我不知道如何测试它.互联网上的大多数TUN/TAP内容都已过时(例如Linux API调用不再起作用),并且没有足够的解释.此外,我觉得创建一个设备和转发包等不是学习目的的最佳方式.举例来说,我宁愿只覆盖socket(), listen(),connect(),accept(),send(),recv()等程序中,而不是转发所有以太网流量的设备/程序负责bookeeping整个系统,而不是一个单独的程序.

我想知道这是否可行.如果没有,我想知道在Linux上测试TCP实现的最简单方法.

因为我正在关注RFC 793,所以如果我的应用程序中可以拥有IP(RFC中提到的Internet协议)API,那就太棒了.这是可能的还是我不得不搞乱TUN/TAP的东西?

谢谢..

linux networking tcp

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

如何一起使用vimclojure和SLIMV?

两个插件都有良好的侧面,SLIMV有更好的REPL(比vimclojure REPL更快),但vimclojure的缩进和语法着色更好(同样,vimclojure的语法着色也在REPL中工作).而vimclojure的缩进更好.例如,这是函数的SLIMV缩进:

(defn func
      [])
Run Code Online (Sandbox Code Playgroud)

这是vimclojure的:

(defn func
   [])
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用两个插件,每个插件都有良好的侧面.我需要在SLIMV REPL和vimclojure缩进中进行语法着色.你有什么想法我该怎么做?

vim clojure slime vimclojure slimv

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

Haskell Alex - 包装模板中的错误

我试图理解亚历克斯和词法分析者的一般情况,但是我很难运行我的词法分析器.

我用"基本"和"posn"包装器写了词法分析器,但我不能用"monad"包装器.我想我必须使用monad包装器,因为我需要在输入中收集字符串和标记位置.我还需要多个州.现在我正试图运行这个简单的例子:

{
module Main (main) where
}

%wrapper "monad"

$whitespace = [\ \b\t\n\f\v\r]
$digit      = 0-9
$alpha      = [a-zA-Z_]
$upper      = [A-Z]
$lower      = [a-z]

@tidentifier = $upper($alpha|_|$digit)*
@identifier  = $lower($alpha|_|$digit)*


tokens :-

$whitespace+ ;
$upper $alpha+ { typeId }
$lower $alpha+ { id_ }
$digit+ { int }

{

data Lexeme = L AlexPosn LexemeClass String

data LexemeClass
        = TypeId String
        | Id String
        | Int Int
        | EOF
    deriving (Show, Eq)

typeId :: AlexInput -> …
Run Code Online (Sandbox Code Playgroud)

haskell alex

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

Haskell Parsec - 使用自定义令牌时错误消息不太有用

我正在分离lexing和解析解析器的各个阶段.经过一些测试后,当我使用除Parsec的Char标记之外的其他标记时,我意识到错误消息不太有用.

以下是使用Char令牌时Parsec的错误消息的一些示例:

ghci> P.parseTest (string "asdf" >> spaces >> string "ok") "asdf  wrong"
parse error at (line 1, column 7):
unexpected "w"
expecting space or "ok"


ghci> P.parseTest (choice [string "ok", string "nop"]) "wrong"
parse error at (line 1, column 1):
unexpected "w"
expecting "ok" or "nop"
Run Code Online (Sandbox Code Playgroud)

因此,字符串解析器会在找到意外字符串时显示预期的字符串,而选择解析器会显示替代字符串.

但是当我使用与我的令牌相同的组合器时:

ghci> Parser.parseTest ((tok $ Ide "asdf") >> (tok $ Ide "ok")) "asdf  "
parse error at "test" (line 1, column 1):
unexpected end of input
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它不会打印出预期的内容.

ghci> Parser.parseTest (choice [tok $ …
Run Code Online (Sandbox Code Playgroud)

parsing haskell parsec lexical-analysis

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

如何使用Clojure分析Java源文件

我正在尝试用Clojure分析Java源文件,但我找不到办法做到这一点.

首先,我想使用Eclipse AST插件(通过将必要的JAR复制到我的Clojure项目中)但是在看到Eclipse AST的API(基于访问者的walker)后我放弃了.

然后我尝试用ANTLR创建一个Java解析器.我只能为ANTLR找到一个Java 1.6语法(http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g)并且它不能用最新的ANTLR编译(这里是错误我'得到).

现在我不知道我该怎么做.在最坏的情况下,我会尝试使用Eclipse AST.

有谁知道用Clojure解析Java文件的更好方法?

谢谢.

编辑:澄清我的观点:我需要在Java项目中找到一些特定的方法调用并检查它的参数(我们有多个方法定义,具有不同类型的参数).现在我有一个用Java编写的简单解决方案(Eclipse AST),但我希望尽可能在这个项目中使用Clojure.

antlr clojure

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

从MonadIO中"抓住"

我的程序中有一个MonadIO实例,我想从MonadIO中抛出/捕获异常(来自Control.Exception基本包中的模块).

一个快速的谷歌搜索返回了很多讨论(约会2003年)和复杂的搜索(如实现MonadControlIO,MonadBase等实例),我想知道是否有一个简单/接受/广泛使用的解决方案,

如果没有,那么这个问题会有什么好处?据我所知,Hackage中有几个软件包可以解决这个问题,我应该使用哪一个?

(顺便说一句,建议我们为什么没有读数catchMonadIO也将赞赏)

谢谢,


编辑:所以托马斯的答案工作正常,但我也想知道还有什么其他选择,我的主要目的是使用IO例外而不是ErrorT表现,我获得了一些表现Control.Monad.IO.Control(443389蜱与318552蜱之后),有没有更好的选择Control.Monad.IO.Control

haskell exception-handling

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