Skip to content

GHCi scripts for standalone execution and Markdown documentation.

License

Notifications You must be signed in to change notification settings

DataHaskell/scripths

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

scripths

GHCi scripts for standalone execution and Markdown documentation.

scripths lets you write .ghci scripts with dependency management and run them as standalone programs — or embed executable Haskell code blocks in Markdown files and evaluate them notebook-style with captured output.

Features

  • Standalone .ghci execution — Run GHCi scripts directly from the command line, with automatic dependency.
  • Cabal metadata directives — Declare build-depends, default-extensions, and ghc-options inline using -- cabal: comments.
  • Markdown notebooks — Execute Haskell code blocks inside Markdown files and render the output back into the document as block quotes.
  • Smart GHCi rendering — Multi-line definitions are automatically wrapped in :{/:} blocks, and IO binds / Template Haskell splices are handled correctly as individual statements.

Installation

cabal install scripths

CLI Usage

scripths [--output=<filename>] [-o <filename>] <script>

When -o / --output is provided for Markdown files, the result is written to that path. Otherwise it is printed to stdout. The file extension determines the mode. .ghci / hs files are parsed and executed as a standalone GHCi script. .md / .markdown files are processed as a notebook with captured output.

Requires GHC and cabal-install on your PATH.

Quick Start

Running a GHCi script

Create a file example.ghci:

double :: Int -> Int
double = (*2)

-- cabal: build-depends: text
:set -XOverloadedStrings
import qualified Data.Text as T

T.take 10 "hello"

double 5

Run it:

scripths example.ghci

Running a Markdown notebook

Create a file notebook.md:

# My Analysis

Some introductory prose.

```haskell
print (5 + 5)
```

Define some values:

```haskell
x = 10
y = 20
```

We can then add the values in the next block and
the output is embeded below.

```haskell
x + y
```

Run it and write the results to a new file:

scripths -o output.md notebook.md

Each Haskell code block is evaluated in order, and its output is inserted into the Markdown as a block quote beneath the code fence.

Cabal Metadata Directives

You can declare dependencies, language extensions, and GHC options directly inside your scripts using -- cabal: comments:

-- cabal: build-depends: text, containers
-- cabal: default-extensions: OverloadedStrings, TypeApplications
-- cabal: ghc-options: -Wall

About

GHCi scripts for standalone execution and Markdown documentation.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published