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. limais a fork of this (abandoned?) project. Initially, I just wanted to fix some bugs, but then realized that I can't conveniently useHaskell Language Serverwith.lhsfiles so I added the.hs->.mdconversion.
 
- 
IHaskell - create Jupyternotebooks withHaskellcode cells andGitHub Flavored Markdowntext 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 Haskellcode 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 hssnippets in.md
 
.lhs -> .md
Examples
- hs -> hs.md -> hs.md.hs
- hs -> hs.md -> hs.md.hs
Rules
- 
Text: 
- 
Snippets: 
- >is for- Haskellcode. There should be an empty line before and after the block with- Haskellcode
- <is for any other code. Such code will be converted into code blocks of type- consolein- .md
- Snippets in ```become```consoleand 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 limaonPATH.
 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 limato inputs:
inputs.lima.url = "github:deemp/flakes?dir=lima";
- Add limato 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-testso thatcabaluses the suppliedlima.
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 Haskellfile there, hover over a term and wait untilHLSshows hints.
 
- 
Troubleshoot if necessary.