{ args ? {} , shell ? "bash" }:
let
  shared = import ./nix/shared.nix args;
  static = shared.possibly-static;
in
shared.pkgs.runCommand "dhall-shell-${shell}" {
  buildInputs = [
    static.dhall
    static.dhall-json
    static.dhall-bash
    static.dhall-nix
    static.dhall-yaml
  ];
  shellHook = ''
    echo "Dhall core tools shell"
    echo "USAGE EXAMPLES"
    echo "    Default (GHC version ${(import ./nix/shared.nix {}).pkgs.haskellPackages.ghc.version}, option completions shell - bash):"
    echo "        $ nix-shell"
    echo "    Overriding default GHC compiler (see ./nix/shared.nix for available options):"
    echo "        $ nix-shell --arg args '{ compiler = "ghc7103"; }'"
    echo "    Overriding option completion shell flavor:"
    echo "        $ nix-shell --argstr shell zsh"

    source <(dhall            --${shell}-completion-script dhall)
    source <(dhall-to-bash    --${shell}-completion-script dhall-to-bash)
    source <(dhall-to-nix     --${shell}-completion-script dhall-to-nix)
    source <(dhall-to-json    --${shell}-completion-script dhall-to-json)
    source <(dhall-to-yaml    --${shell}-completion-script dhall-to-yaml)
    source <(dhall-to-yaml-ng --${shell}-completion-script dhall-to-yaml-ng)
    source <(json-to-dhall    --${shell}-completion-script json-to-dhall)
    source <(yaml-to-dhall    --${shell}-completion-script yaml-to-dhall)
  '';
} ""
