Skip to content

πŸ“œ Simple bash interpreter for easier Haskell scripting (via Nix)

Notifications You must be signed in to change notification settings

jmackie/nix-runghc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 

Repository files navigation

nix-runghc

A tiny, Haskell-specific wrapper for the nix-shell script interpreter. Extracts package dependencies specified with -XPackageImports and constructs a nix-shell command.

Installation

Put the script on your $PATH:

$ curl https://raw.githubusercontent.com/jmackie/nix-runghc/master/nix-runghc > SOME_PATH_DIRECTORY/nix-runghc

Example

Main.hs

#! /usr/bin/env nix-runghc
#! ghc=842
{-# LANGUAGE LambdaCase        #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PackageImports    #-}
module Main where

import           "aeson" Data.Aeson                      ((.:))
import qualified "aeson" Data.Aeson                      as Aeson
import qualified "bytestring" Data.ByteString.Lazy.Char8 as ByteString
import qualified "HTTP" Network.HTTP                     as HTTP
import qualified System.IO                               as IO

-- Some actual code here...

Provided nix-runghc is available on your path and the module (above) is executable, you can run it with:

$ ./Main.hs

Which will end up invoking:

$ nix-shell \
    --packages "haskell.packages.ghc842.ghcWithPackages (pkgs: with pkgs; [aeson bytestring HTTP])" \
    --pure \
    --command "sed '/^!#/d' ./Main.hs | runghc --ghc-arg=-XPackageImports; exit"

Development Mode

I feel lost without ghcid these days. So I added the ability to drop into a configured nix-shell, from which you can fire up ghcid or your editor or whatever.

$ nix-runghc --shell ./Main.hs
$ nix-runghc -v --shell ./Main.hs # verbose output
$ nix-runghc --shell --hoogle ./Main.hs # with docs

About

πŸ“œ Simple bash interpreter for easier Haskell scripting (via Nix)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages