lima: (Haskell or Literate Haskell) <-> Markdown converter

[ library, mit, productivity, program ] [ Propose Tags ]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],,,,,,
Change log
Dependencies aeson, base (>=4 && <5), data-default, lima, optparse-applicative, yaml [details]
License MIT
Author Fabian Schneider
Maintainer Danila Danko
Category Productivity
Bug tracker
Source repo head: git clone
Uploaded by deemp at 2023-02-19T21:38:09Z
Distributions NixOS:
Executables lima
Downloads 117 total (20 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2023-02-19 [all 1 reports]

Readme for lima-

[back to package description]


Convert between

  • Haskell (.hs) and GitHub Flavored Markdown (.md)
  • Literate Haskell (.lhs) and GitHub Flavored Markdown (.md).

It is usually possible to make conversion abide the roundtrip property. In other words, make conversions file.lhs -> -> or file.hs -> -> and get file.lhs = and file.hs = in terms of their contents.




  • LiterateMarkdown. lima is a fork of this (abandoned?) project. Initially, I just wanted to fix some bugs, but then realized that I can't conveniently use Haskell Language Server with .lhs files so I added the .hs -> .md conversion.

  • IHaskell - create Jupyter notebooks with Haskell code cells and GitHub Flavored Markdown text cells and do much more!


.hs -> .md


  1. hs -> ->


  • Multiline comments:
    • Become text blocks.
    • Should be written:
      • in GitHub Flavored Markdown;
      • on one line: {- <COMMENTS> -};
      • on many lines: {-\n<COMMENTS>\n-}.
    • Split Haskell code in .md.
  • Special comments:
    • Become comments in .md.
    • Can be supplied in a config via lima --config <your config path> (sample config)
    • Should be written on a single line: {- <COMMENTS> -}
    • {- LIMA_INDENT N -} increases the indentation of snippets by N
    • {- LIMA_DEDENT -} sets the indentation of snippets to 0
    • {- LIMA_DISABLE -} starts copying the following lines verbatim
    • {- LIMA_ENABLE -} stops copying the following lines verbatim
  • Code and single-line comments:
    • Become hs snippets in .md

.lhs -> .md


  1. hs -> ->
  2. hs -> ->


  • Text:

    • As .lhs doesn't support # (heading) or > (quotation start) at a line beginning, write # and > instead. lhs -> ->

      •  # -> # ->  #
      •  > -> > ->  >
  • Snippets:

    • > is for Haskell code. There should be an empty line before and after the block with Haskell code
    • < is for any other code. Such code will be converted into code blocks of type console in .md
    • Snippets in ``` become ```console and then <.
      • The round-trip property is not guarranteed

Command-line tool

From Hackage

  1. Install via cabal

    cabal update
    cabal install lima

From sources

  1. Clone this repo and install lima.

    git clone
    cd flakes/lima
    cabal update
    cabal install .


  1. Install Nix

  2. Get lima on PATH.

    nix flake lock github:deemp/flakes?dir=lima
    nix shell github:deemp/flakes?dir=lima
    lima --help


Warning: took it from LiterateMarkdown.

To install the executable on Windows, if you can't convince cabal to use --bindir-method=copy you can build the project locally and copy the built executable to C:/Users/username/AppData/Roaming/cabal/bin and ensure that this directory is in your PATH.


You can use lima to generate your docs, e.g., via cabal test docs. Just provide such a test with a script that converts (and, possibly, combines) files. As you'll use lima in a script, you should add it to that test's build-tool-depends:

    lima:lima ==0.1.*

Nix flake

  1. Add lima to inputs:
inputs.lima.url = "github:deemp/flakes?dir=lima";
  1. Add lima to the override of your package
override = {
  overrides = self: super: {
    myPackage = overrideCabal
      (super.callCabal2nix myPackageName ./. { })
      (x: {
        testHaskellDepends = [
          (super.callCabal2nix "lima" "${lima.outPath}/lima" { })
        ] ++ (x.testHaskellDepends or [ ]);
  1. Use cabal v1-test so that cabal uses the supplied lima.


Clone this repo and enter lima

git clone
cd flakes/lima


Build as usually

cabal update
cabal build


  1. Install Nix.

  2. Run a devshell and build lima:

    nix develop nix-dev/
    cabal build
  3. Optionally, start VSCodium:

    nix run nix-dev/#writeSettings
    nix run nix-dev/#codium .
  4. Open a Haskell file there, hover over a term and wait until HLS shows hints.

  5. Troubleshoot if necessary.