{ lib, fetchurl, ghc, stdenv, which }:
stdenv.mkDerivation rec {
  pname = "havm";
  version = "0.28";

  src = fetchurl {
    url = "https://www.lrde.epita.fr/~tiger/download/${pname}-${version}.tar.gz";
    sha256 = "sha256-FDi4FZ8rjGqRkFlROtcJsv+mks7MmIXQGV4bZrwkQrA=";
  };

  nativeBuildInputs = [
    ghc
  ];

  checkInputs = [
    which
  ];

  doCheck = true;

  meta = with lib; {
    description = "A simple virtual machine to execute Andrew Appel's HIR/LIR";
    longDescription = ''
      HAVM is a virtual machine designed to execute simple register based high
      level intermediate code.  It is based on the intermediate representations
      ("canonicalized" or not) defined by Andrew Appel in his "Modern Compiler
      Implementation".
    '';
    homepage = "https://www.lrde.epita.fr/wiki/Havm";
    license = licenses.gpl2Plus;
    platforms = platforms.all;
    maintainers = with maintainers; [ ambroisie ];
  };
}