小编tfb*_*boy的帖子

OCaml中是否有中缀函数组合运算符?

只是一个简单的问题.我想知道在标准库(或在Jane Street的核心或电池中)中定义的OCaml中是否存在中缀函数组合运算符,就像Haskell中的(.)函数一样,它为我们节省了很多括号,因为我们可以编写(f . g . h) x而不是不太吸引人f (g (h x))).

谢谢大家.

ocaml ocaml-batteries ocaml-core

23
推荐指数
4
解决办法
1万
查看次数

Haskell更安全的句柄?

使用Haskell Handles时我觉得有点不安全.也就是说,我正在寻找两个功能(也许他们已经在那里,在这种情况下请原谅我的无知).

  1. 当我获得一个句柄(例如,通过返回Network.accept),这是可读可写的,我想将它们转换为一对 只读只写处理,使得写入只读手柄不会类型检查,反之亦然.(也许可以使用幻像类型和IO函数包裹来实现这一点?)
  2. 在并发设置中,我发现多个线程可能会写入同一个句柄,这会产生非常严重的后果.如何通过类型系统(如果可能)阻止这种情况,或者至少在运行时通过抛出的异常通知这种情况?

欢迎任何想法.

io concurrency haskell functional-programming

13
推荐指数
2
解决办法
326
查看次数

OCaml标准库中是否有`flip`功能?

在Haskell中,我们有一个flip函数:flip f x y = f y x它本质上接受一个函数并返回相同的函数,除了交换两个参数.我想知道OCaml中是否有对应物,因为我找不到它并且不想每次都重写它.

干杯,

ocaml

11
推荐指数
3
解决办法
1532
查看次数

将类型为"a - > b"的函数转换为Haskell中类型为"String - > String"的函数

我的意图很简单.我想将类型的函数包装a -> bString -> String(以便可以将一堆异构函数放入列表中).所以我写道:

wrap :: (Read a, Show b) => (a -> b) -> (String -> String)
wrap f = \s -> show $ f (read s :: a)
Run Code Online (Sandbox Code Playgroud)

但是,ghc投诉:

Could not deduce (Read a1) arising from a use of `read'
from the context (Read a, Show b)
  bound by the type signature for
             wrap :: (Read a, Show b) => (a -> b) -> String -> String
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我的代码不起作用以及需要什么样的黑客来实现我的目标?

谢谢.

haskell functional-programming

7
推荐指数
2
解决办法
328
查看次数

如何在OCaml中使用#use指令包含其他源文件?

我是OCaml的新手,我想把一些代码放到另一个文件中,比如foo.ml,就像在C++或Python中那样.但是这部分代码本身并不构成一个模块.

我已经包含#use "foo.ml"在我的主要源文件的头部.但是当我使用ocamlbuild它构建我的项目时,它会报告I/O error: "foo.ml: No such file or directory".但显然foo.ml是在当前的工作目录中.

我想知道是否有人知道如何在OCaml中实现这个目标并让我的项目被构建,或者如果这不是OCaml中的约定?任何建议都是受欢迎的.

ocaml

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

如何推断出这个函数的类型?

我正在摸索着想出这个功能的签名

let make_rec f_norec =
  let rec f x = f_norec f x in
  f
Run Code Online (Sandbox Code Playgroud)

应该是

val make_rec : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun>.

注意有一个奇怪的递归定义.当然,我在那里缺少一些知识.谁能告诉我如何计算函数的类型(如类型推理系统那样)?

十分感谢.

recursion ocaml functional-programming type-inference

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