只是一个简单的问题.我想知道在标准库(或在Jane Street的核心或电池中)中定义的OCaml中是否存在中缀函数组合运算符,就像Haskell中的(.)函数一样,它为我们节省了很多括号,因为我们可以编写(f . g . h) x而不是不太吸引人f (g (h x))).
谢谢大家.
使用Haskell Handles时我觉得有点不安全.也就是说,我正在寻找两个功能(也许他们已经在那里,在这种情况下请原谅我的无知).
Network.accept),这是可读可写的,我想将它们转换为一对
只读和只写处理,使得写入只读手柄不会类型检查,反之亦然.(也许可以使用幻像类型和IO函数包裹来实现这一点?)欢迎任何想法.
在Haskell中,我们有一个flip函数:flip f x y = f y x它本质上接受一个函数并返回相同的函数,除了交换两个参数.我想知道OCaml中是否有对应物,因为我找不到它并且不想每次都重写它.
干杯,
我的意图很简单.我想将类型的函数包装a -> b成String -> 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)
我想知道为什么我的代码不起作用以及需要什么样的黑客来实现我的目标?
谢谢.
我是OCaml的新手,我想把一些代码放到另一个文件中,比如foo.ml,就像在C++或Python中那样.但是这部分代码本身并不构成一个模块.
我已经包含#use "foo.ml"在我的主要源文件的头部.但是当我使用ocamlbuild它构建我的项目时,它会报告I/O error: "foo.ml: No such file or directory".但显然foo.ml是在当前的工作目录中.
我想知道是否有人知道如何在OCaml中实现这个目标并让我的项目被构建,或者如果这不是OCaml中的约定?任何建议都是受欢迎的.
我正在摸索着想出这个功能的签名
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>.
注意有一个奇怪的递归定义.当然,我在那里缺少一些知识.谁能告诉我如何计算函数的类型(如类型推理系统那样)?
十分感谢.