lima
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 -> file.lhs.md -> file.lhs.md.lhs or file.hs -> file.hs.md -> file.hs.md.hs and get file.lhs = file.lhs.md.lhs and file.hs = file.hs.md.hs in terms of their contents.
Demo

Alternatives
-
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!
Conversion
.hs -> .md
Examples
- hs -> hs.md -> hs.md.hs
Rules
- 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
Examples
- hs -> hs.md -> hs.md.hs
- hs -> hs.md -> hs.md.hs
Rules
-
Text:
-
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
From Hackage
-
Install via cabal
cabal update
cabal install lima
From sources
-
Clone this repo and install lima.
git clone https://github.com/deemp/flakes
cd flakes/lima
cabal update
cabal install .
Nix
-
Install Nix
-
Get lima on PATH.
nix flake lock github:deemp/flakes?dir=lima
nix shell github:deemp/flakes?dir=lima
lima --help
Windows
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:
build-tool-depends:
lima:lima ==0.1.*
Nix flake
- Add
lima to inputs:
inputs.lima.url = "github:deemp/flakes?dir=lima";
- 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 [ ]);
});
};
};
- Use
cabal v1-test so that cabal uses the supplied lima.
Contribute
Clone this repo and enter lima
git clone https://github.com/deemp/flakes
cd flakes/lima
cabal
Build as usually
cabal update
cabal build
nix
-
Install Nix.
-
Run a devshell and build lima:
nix develop nix-dev/
cabal build
-
Optionally, start VSCodium:
nix run nix-dev/#writeSettings
nix run nix-dev/#codium .
-
Open a Haskell file there, hover over a term and wait until HLS shows hints.
-
Troubleshoot if necessary.