我最近正在阅读一个OCaml项目,我想把源文件放在utop中,这样我就可以做一些实验了.
假设我有两个文件amodule.ml,bmodule.ml.
bmodule.ml将使用amodule.ml中定义的函数,例如,bmodule使用Amodule.anyfunction(),其中anyfunction()在amodule.ml中定义.
我想把它们都放在utop中:
#directory "/directory contain amodule.ml and bmodule.ml"
#use "amodule.ml"
#use "bmodule.ml"
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为Amodule是amodule.ml文件的模块名称,utop不知道这些东西,我想.
那么如何在不改变文件内容的情况下将这些文件放在utop中呢?
你如何在OCaml中实现反向状态monad?(因为它很大程度上依赖于懒惰,我想必须使用标准库中的Lazy模块).
我看到的大多数Haskell代码都使用了直接结构,例如列表和树.例如,Haskeller通常会写:
fillRect :: Color ? Bounds ? Image ? Image
Run Code Online (Sandbox Code Playgroud)
该模式存在一个问题:如果稍后程序员决定修改"Image"的定义,或者使用其他数据结构,那么他将不得不使用它来重构每一段代码.在OCaml中,您可以简单地使用指定Image接口的模块,然后决定稍后的具体实现.
什么是OCaskl模块的Haskell替代品?
理想情况下,除了OCaml之外,该库还支持多种语言,但对OCaml的良好支持是主要要求.
我做了sudo gem install sass
,成功了.运行sudo sass -v
正常,但作为普通用户运行给出:
$ sass -v
-bash: /usr/bin/sass: Permission denied
Run Code Online (Sandbox Code Playgroud)
实际上,可执行文件的权限是700.我将权限更改为755,但这导致:
$ sass -v
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'sass' (>= 0) among 4 total gem(s) (Gem::LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:307:in `to_spec'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in `gem'
from /usr/bin/sass:22:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我已经google了所有的东西,但无法找到解决方案.这是输出gem env
,如果我这样做是相同的sudo gem env
.
$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.0.3
- RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [universal.x86_64-darwin13]
- INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
- RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
- EXECUTABLE DIRECTORY: /usr/bin …
Run Code Online (Sandbox Code Playgroud) ocaml ×4
haskell ×2
gem ×1
javascript ×1
module ×1
monads ×1
ocamlbuild ×1
ocamlfind ×1
ruby ×1
rubygems ×1
sass ×1
sml ×1
state-monad ×1