我已经用Haddock样式注释了我的代码,并希望生成可浏览的文档.由于我也使用堆栈,我想将文档生成集成到工作流程中.但是,我还没有能够产生任何有用的东西.
我可以跑
stack haddock
Run Code Online (Sandbox Code Playgroud)
它将生成我想要的样式的文档(深入内部~/.stack/),但它似乎只生成我依赖的包的文档,而不是我自己的代码.
我跑的时候
stack haddock --help
Run Code Online (Sandbox Code Playgroud)
我得到的印象是,我可以使用附加参数--haddock为我自己的项目生成文档,并--no-haddock-deps省略我的依赖项的文档.但是,当我跑
stack haddock --haddock --no-haddock-deps
Run Code Online (Sandbox Code Playgroud)
似乎什么也没发生.如果我stack clean首先它将重新编译我的所有代码,但没有生成输出,似乎以任何方式与文档相关.
作为一个中间解决方案,我也试过自己运行Haddock,即
haddock my-source.hs
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个错误,它无法找到文件依赖的模块(由堆栈本地安装).这让我觉得文档生成必须以某种方式通过堆栈.我已经找了,但没有真正找到任何与配置文档.cabal和stack.yaml文件相关的解释.
TL; DR
如何使用stack和Haddock为我自己的包中的代码生成文档?
作为练习,我试图apply在Haskell中重新创建Lisp .我不打算将它用于任何实际目的,我认为这是一个很好的机会,可以更熟悉Haskell的类型系统和类型系统.(所以我也不是在寻找其他人的实现.)
我的想法如下:我可以使用GADT来"标记"列表,其中包含可应用的函数类型.所以,我重新定义Nil并Cons以类似的方式使用Nat定义来编码类型中的列表长度,但是不使用Peano数字,长度是以标记函数类型编码的方式(即长度对应于参数的数量)功能).
这是我到目前为止的代码:
{-# LANGUAGE GADTs #-}
-- n represents structure of the function I apply to
-- o represents output type of the function
-- a represents argument type of the function (all arguments same type)
data FList n o a where
-- with Nil the function is the output
Nil :: FList o o a
-- with Cons the corresponding function takes one more argument
Cons :: a -> …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个可以查询/更新某些状态信息的流程(我正在开发短信服务,并希望根据响应存储一些本地数据 - 稍后我将使用数据库,但现在我想使用 ETS,这是我的第一个 Erlang 项目,所以我认为学习它很有用)。不幸的是,我的插入似乎没有通过,我不明白为什么。这是模块:
-module(st).
-compile(export_all).
maintain_state() ->
Tab = ets:new(state, [set]),
receive
{Pid, lookup, Key} ->
Pid ! ets:lookup(Tab, Key),
maintain_state();
{Pid, update, Key, Handler} ->
NewState = Handler(ets:lookup(Tab, Key)),
Status = ets:insert(Tab, NewState),
Pid ! {Status, NewState},
maintain_state();
{Pid, statelist} ->
Pid ! ets:tab2list(Tab),
maintain_state();
kill ->
void
end,
ets:delete(Tab).
start_state_maintainer() ->
Pid = spawn(st, maintain_state, []),
register(state, Pid).
update_state(StateHandler) ->
state ! {self(), update, testing, StateHandler},
receive
After ->
After
after 1000 ->
throw("Timeout in …Run Code Online (Sandbox Code Playgroud)