Dialyzer 不会发出此函数返回类型不一致的信号:
-spec myfun(integer()) -> zero | one.
myfun(0) -> zero;
myfun(1) -> one;
myfun(2) -> other_number.
Run Code Online (Sandbox Code Playgroud)
但它在最后一行的情况下检测到
myfun(_) -> other_number.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我相信以上应该是一个非常简单的案例。
谢谢
我应该如何编写 Asciidoc(tor) 以获得以下输出:
* item 1
* item a
paragraph 1 inside item a
* item a.1 inside paragraph 1 inside item a
paragraph a.1 inside item a.1
* item a.2 inside paragraph 1 inside item a
paragraph a.2 inside item a.1
paragraph 2 inside item a
* item b
paragraph 1 inside item b
* item 2
Run Code Online (Sandbox Code Playgroud)
更新:@TigerTV.ru 提出了一个不错的技巧,但它需要能够在项目符号列表中隐藏项目符号。如何才能做到这一点?
谢谢
我想知道在GHCi中评估表达式时,Haskell使用的规则总是决定Integer实例而不是其他实例1 .+. 2:
import Debug.Trace
class MyFuns a where
(.+.) :: a ? a ? a
instance MyFuns Double where
x .+. y = trace "Double " $ x + y
instance MyFuns Integer where
x .+. y = trace "Integer " $ x + y
instance MyFuns Int where
x .+. y = trace "Int " $ x + y
Run Code Online (Sandbox Code Playgroud)
编辑:如果我在文件的末尾添加以下代码
main = do
let x = 1 .+. 2
print x
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?
No instance for …Run Code Online (Sandbox Code Playgroud) 理论指出,一组并发事务是可序列化的,当且仅当它们的并发执行等效于其中一个可能的串行执行。
现在下面的事务T1和T2的并发执行是可串行化的,因为等价于串行执行“T1然后T2”
T1: r1x w1y c1
T2: w2x c2
(i.e., T1 reads x, T2 writes x, T1 writes y, T2 commits, and finally, T1 commits)
Run Code Online (Sandbox Code Playgroud)
但是,在 PostgreSQL 10.4 中尝试时,如下所示:
T1: begin
T1: set transaction isolation level serializable;
T2: begin
T2: set transaction isolation level serializable;
T2: update variables set value = value + 1 where name = 'x'
T1: update variables set value = value + 1 where name = 'y'
T2: commit
T1: commit
Run Code Online (Sandbox Code Playgroud)
当此事务尝试提交时,数据库将中止 T1。为什么?
我有许多文件必须自动处理.每个文件保存一个学生对练习的响应,该练习要求学生给出每个功能类型的某些功能的定义.
我的想法是有一个Haskell脚本加载每个学生文件,并验证每个函数是否具有预期的类型.
约束是学生文件未定义为模块.
我怎样才能做到这一点?
到目前为止,我最好的选择是生成GHCi进程,该进程将使用GHCi命令从"测试文件"中读取stdin,例如:
:load student1.hs
:t g
... and so on ...
Run Code Online (Sandbox Code Playgroud)
然后从GHCi解析返回的输出以查找student文件中的函数类型.
是否有另一种干净的方法来加载任意Haskell文件并内省其代码?
谢谢
鉴于以下代码,为什么Haskell只在到达第二个时报告错误id?
data TypeX = TypeX {
id :: Int -- why not the error here?
, val :: String
} deriving (Show)
var1 = TypeX 1 "bananas"
var2 = TypeX {
val = "oranges"
, id = 2 -- why an error here?
}
Run Code Online (Sandbox Code Playgroud)
错误是:
ghci> :l TypeX.lhs
[1 of 1] Compiling Main ( TypeX.lhs, interpreted )
TypeX.lhs:8:13:
Ambiguous occurrence ‘id’
It could refer to either ‘Main.id’, defined at TypeX.lhs:2:15
or ‘Prelude.id’,
imported from ‘Prelude’ at TypeX.lhs:1:1
(and …Run Code Online (Sandbox Code Playgroud) 在不阻塞的情况下写入标准输入和从子进程的标准输出读取的最佳方法是什么?
通过创建子流程,通过该子流程System.IO.createProcess返回用于写入和读取子流程的句柄。书写和阅读以文本格式完成。
例如,我做非阻塞读取的最佳尝试是timeout 1 $ hGetLine out返回a Just "some line"或Nothing如果不存在要读取的行。但是,对我来说这似乎是一个hack,因此我正在寻找一种更“标准”的方式。
谢谢
在我的 vimrc 文件中,我有以下条目用“+”包围单词:
:nnoremap <silent> q+ wbi+<ESC>ea+<Esc>
Run Code Online (Sandbox Code Playgroud)
我想更改此设置以用任何其他符号(例如引号)包围单词,但我不想使用另一个插件或插入另一个地图。我想在我的 vimrc 中添加这样的内容:
:nnoremap <silent> qX wbiX<ESC>eaX<Esc>
Run Code Online (Sandbox Code Playgroud)
其中 X 是放置在单词周围的字符。
在 VIM 中如何做到这一点?
谢谢
我在Ocaml中有这个代码
let double x = 2 * x
let triple x = 3 * x
let s = "Hello" in print_endline s
let () = triple 10 |> string_of_int |> print_endline
Run Code Online (Sandbox Code Playgroud)
并且在使用ocamlc file.ml此编译时会出现错误:
File "file.ml", line 5, characters 16-18:
Error: Syntax error
Run Code Online (Sandbox Code Playgroud)
如果我;;像这样放在第3行的末尾
let triple x = 3 * x;;
Run Code Online (Sandbox Code Playgroud)
如果我像这样评论第5行中的字符16-18
let s = "Hello" (* in print_endline s *)
Run Code Online (Sandbox Code Playgroud)
语法错误消失了.
有人可以解释语法错误的原因,以及这两个更正中的每一个都可以解决它吗?
我目前的理解是宏可以实现任何可以想象的概念,包括monad,因为它们"手头有编译器".这是真的?例如,我遇到过这个链接
请给我一些事实和例子,没有激情的答案.谢谢.
我已经阅读了Erlang文档,特别是有关Erlang Ports和Erlang Nodes的主题.
本教程使用相同的示例来说明这两个概念,即服务于两个简单函数的程序,但尽管存在一些通信协议差异,但它并未阐明使用这两个概念的优缺点.
乍一看,似乎端口更容易在外部语言中设置服务器,但我想知道Erlang端口可以提供哪些Erlang端口不能,反之亦然.
任何人都可以澄清Erlang Ports vs Nodes的功能和非功能方面吗?
谢谢
澄清更新
我真正想要比较的是用非ErlangVM语言编写的Erlang Ports vs Node(我知道Erlang节点是完整的Erlang VM,因此比Ports强大得多).例如,C端口可以做什么C节点不能,反之亦然?
haskell ×5
erlang ×2
asciidoc ×1
asciidoctor ×1
concurrency ×1
dialyzer ×1
elixir ×1
lisp ×1
macros ×1
monads ×1
ocaml ×1
postgresql ×1
serializable ×1
syntax-error ×1
transactions ×1
vim ×1