小编Sam*_*den的帖子

使用Haddock和堆栈为我自己的代码生成文档

我已经用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)

但后来我得到一个错误,它无法找到文件依赖的模块(由堆栈本地安装).这让我觉得文档生成必须以某种方式通过堆栈.我已经找了,但没有真正找到任何与配置文档.cabalstack.yaml文件相关的解释.

TL; DR

如何使用stack和Haddock为我自己的包中的代码生成文档?

haskell cabal haddock haskell-stack

26
推荐指数
2
解决办法
3679
查看次数

使用GADT在Haskell中重新创建Lisp的`apply`

作为练习,我试图apply在Haskell中重新创建Lisp .我不打算将它用于任何实际目的,我认为这是一个很好的机会,可以更熟悉Haskell的类型系统和类型系统.(所以我也不是在寻找其他人的实现.)

我的想法如下:我可以使用GADT来"标记"列表,其中包含可应用的函数类型.所以,我重新定义NilCons以类似的方式使用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)

haskell gadt dependent-type

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

ETS 似乎没有存储我的插入内容

我正在尝试实现一个可以查询/更新某些状态信息的流程(我正在开发短信服务,并希望根据响应存储一些本地数据 - 稍后我将使用数据库,但现在我想使用 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)

erlang ets

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

标签 统计

haskell ×2

cabal ×1

dependent-type ×1

erlang ×1

ets ×1

gadt ×1

haddock ×1

haskell-stack ×1