diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
--- a/.travis.yml
+++ /dev/null
@@ -1,98 +0,0 @@
-language: c
-sudo: false
-
-cache:
-  directories:
-    - $HOME/.cabsnap
-    - $HOME/.cabal/packages
-
-before_cache:
-  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
-  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
-
-matrix:
-  include:
-    - env: CABALVER=1.18 GHCVER=7.8.4 COVERAGE=1
-      compiler: ": #GHC 7.8.4"
-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
-    - env: CABALVER=1.22 GHCVER=7.10.3
-      compiler: ": #GHC 7.10.3"
-      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
-    - env: CABALVER=1.24 GHCVER=8.0.2
-      compiler: ": #GHC 8.0.2"
-      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
-    - env: CABALVER=2.0 GHCVER=8.2.2
-      compiler: ": #GHC 8.2.2"
-      addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,alex-3.1.7,happy-1.19.5], sources: [hvr-ghc]}}
-
-before_install:
- - unset CC
- - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/alex/3.1.4/bin:/opt/happy/1.19.5/bin:$PATH
-
-install:
- - cabal --version
- - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
- - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
-   then
-     zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
-          $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
-   fi
- - travis_retry cabal update -v
- - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config
- - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt
- - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
-
-# check whether current requested install-plan matches cached package-db snapshot
- - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
-   then
-     echo "cabal build-cache HIT";
-     rm -rfv .ghc;
-     cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
-     cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
-   else
-     echo "cabal build-cache MISS";
-     rm -rf $HOME/.cabsnap;
-     mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
-     cabal install --only-dependencies --enable-tests --enable-benchmarks;
-   fi
-
-# snapshot package-db on cache miss
- - if [ ! -d $HOME/.cabsnap ];
-   then
-      echo "snapshotting package-db to build-cache";
-      mkdir $HOME/.cabsnap;
-      cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
-      cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
-   fi
-
-# Here starts the actual work to be performed for the package under test;
-# any command which exits with a non-zero exit code causes the build to fail.
-script:
- - if [ -f configure.ac ]; then autoreconf -i; fi
- - cabal configure --enable-tests --enable-benchmarks -v2 $([ "$COVERAGE" = "1" ] && echo "--enable-library-coverage") # -v2 provides useful information for debugging
- - cabal build   # this builds all libraries and executables (including tests/benchmarks)
- - cabal test
- - cabal check
- - cabal sdist   # tests that a source-distribution can be generated
-
-# Check that the resulting source distribution can be built & installed.
-# If there are no other `.tar.gz` files in `dist`, this can be even simpler:
-# `cabal install --force-reinstalls dist/*-*.tar.gz`
- - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&
-   (cd dist && cabal install --force-reinstalls "$SRC_TGZ")
-
-before_deploy:
- - cp dist/build/cpl/cpl ./
- - cabal install turtle
- - runghc misc/build_zip.hs
-
-deploy:
-  provider: releases
-  api_key:
-    secure: "hBzyr9MKoa7xYcxjiiEEa+EgOmD/Fi314ojXB0zz6urcxTXzljLQt705r6Ev+2xlRpXlcpxPbpIAz/Quyzrt7grvuHv1K43ZGEh1QrzUQ7X+ke6gjfgwUAOe37BHUtYR5Dd+THJ2HfAJ5nndFbzfnK5tkkxFk+BuDlUVQlIGw00="
-  file_glob: true
-  file: '*.zip'
-  skip_cleanup: true
-  on:
-    tags: true
-    condition: "$GHCVER = 8.2.2"
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,21 +1,34 @@
-Changes since the 0.0.7 release
+0.1.0 (2025-10-29)
 -------------------------------
 
+* Update Cabal-Version requirement from >=1.10 to 2.2
+* Require `mtl` >=2.2.1 for `Control.Monad.Except`
+* Fix compilation error on recent `mtl` package
+
+0.0.9 (2018-02-16)
+-------------------------------
+
+* Use `Control.Monad.Except` instead of deprecated Control.Monad.Error
+
+0.0.8 (2016-01-14)
+-------------------------------
+
 * "→" can be used instead of "->"
 * GHC-7.10 support
+* Add windows installer
 
-Changes since the 0.0.6 release
+0.0.7 (2014-08-13)
 -------------------------------
 
 * Clean up internals
 * Enable `-fReadline` and `-fHaskeline` by default
 
-Changes since the 0.0.5 release
+0.0.6 (2009-10-26)
 -------------------------------
 
 Readline/Haskeline support.
 
-Changes since the 0.0.3 release
+0.0.4
 -------------------------------
 
 Function defintions are added.
diff --git a/CPL.cabal b/CPL.cabal
--- a/CPL.cabal
+++ b/CPL.cabal
@@ -1,11 +1,11 @@
+cabal-version: 2.2
 Name:		CPL
-Version:	0.0.9
-License:	BSD3
+Version:	0.1.0
+License:	BSD-3-Clause
 License-File:	COPYING
 Author:		Masahiro Sakai (masahiro.sakai@gmail.com)
 Maintainer:	masahiro.sakai@gmail.com
 Category:	Compilers/Interpreters
-Cabal-Version:	>=1.10
 Homepage:       https://github.com/msakai/cpl
 Synopsis:	An interpreter of Hagino's Categorical Programming Language (CPL).
 Description:
@@ -19,11 +19,10 @@
    morphisms. Programs consist of these morphisms, and execution of
    programs is the reduction of elements (i.e. special morphisms) to
    their canonical form.
-Extra-Source-Files:
+Extra-Doc-Files:
    README.markdown,
-   CHANGELOG.markdown,
-   appveyor.yml,
-   .travis.yml,
+   CHANGELOG.markdown
+Extra-Source-Files:
    samples/ack.cpl,
    samples/automata.cdt,
    samples/ccc.cdt,
@@ -34,14 +33,7 @@
    samples/rec.cdt,
    samples/benchmark.cpl,
    samples/ack_3_4.cpl,
-   samples/function.cpl,
-   src/CDT.hs-boot,
-   windows/COPYING.rtf,
-   windows/CPL.wxs,
-   windows/build_msi.hs,
-   windows/build_zip.hs,
-   misc/build_zip.hs,
-   build_bdist_linux.sh
+   samples/function.cpl
 Build-Type: Simple
 
 source-repository head
@@ -65,7 +57,8 @@
   Main-is: Main.hs
   HS-Source-Dirs: src
   Other-Modules: AExp CDT CDTParser CPLSystem Exp ExpParser FE Funct ParserUtils Simp Statement Subst Type Typing Variance Paths_CPL
-  Build-Depends: base >=4 && <5, mtl >=2.0.0.0, containers, array, parsec
+  Autogen-Modules: Paths_CPL
+  Build-Depends: base >=4 && <5, mtl >=2.2.1, containers, array, parsec
   Default-Language: Haskell2010
   Other-Extensions: TypeSynonymInstances, FlexibleInstances, CPP, GeneralizedNewtypeDeriving
   if flag(Readline)
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,9 +1,12 @@
-An implementation of "A Categorical Programing Language"
-========================================================
+An implementation of "A Categorical Programming Language"
+=========================================================
 
-[![Build Status](https://secure.travis-ci.org/msakai/cpl.png?branch=master)](http://travis-ci.org/msakai/cpl) [![Build status](https://ci.appveyor.com/api/projects/status/dl935ws9jouy06br/branch/master?svg=true)](https://ci.appveyor.com/project/msakai/cpl/branch/master) [![Hackage](https://img.shields.io/hackage/v/CPL.svg)](https://hackage.haskell.org/package/CPL)
+[![Build Status](https://github.com/msakai/cpl/actions/workflows/build.yaml/badge.svg)](https://github.com/msakai/cpl/actions/workflows/build.yaml)
+[![Hackage](https://img.shields.io/hackage/v/CPL.svg)](https://hackage.haskell.org/package/CPL)
+[![Hackage Deps](https://img.shields.io/hackage-deps/v/CPL.svg)](https://packdeps.haskellers.com/feed?needle=CPL)
+[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
 
-This package is an implementation of "A Categorical Programing Language"
+This package is an implementation of "A Categorical Programming Language"
 (CPL for short)[1][2] written in Haskell.
 
 CPL is a functional programming language based on category
@@ -20,15 +23,17 @@
 Install
 -------
 
-De-Compress archive and enter its top directory.
+De-Compress the archive and enter its top directory.
 Then type:
 
-    $ cabal configure
-    $ cabal build
-    $ cabal install
+```
+$ cabal configure
+$ cabal build
+$ cabal install
+```
 
-If you want to compile with readline or haskeline, add -fReadline or
--fHaskeline respectively to configure command.
+If you want to compile with readline or haskeline, add `-fReadline` or
+`-fHaskeline` respectively to the configure command.
 
 Usage
 -----
@@ -38,8 +43,8 @@
 License
 -------
 
-This program is licenced under the BSD-style license.
-(See the file 'COPYING'.)
+This program is licensed under the BSD-style license.
+(See the file [COPYING](COPYING).)
 
 Copyright (C) 2004-2014 Masahiro Sakai <masahiro.sakai@gmail.com>
 
@@ -51,11 +56,11 @@
 Bibliography
 ------------
 
-(1) Tatsuya Hagino, “A Categorical Programming Languge”.
-    Ph.D. Thesis, University of Edinburgh, 1987
+1. Tatsuya Hagino, “A Categorical Programming Language”.
+    Ph.D. Thesis, University of Edinburgh, 1987.
     available at <http://web.sfc.keio.ac.jp/~hagino/index.html.en>
 
-(2) Tatsuya Hagino, “Categorical Functional Programming Language”.
+2. Tatsuya Hagino, “Categorical Functional Programming Language”.
     Computer Software, Vol 7, No.1.
-    Advances in Software Science and Technology 4, 1992
-    ISBN 0-12-037104-9
+    Advances in Software Science and Technology 4, 1992.
+    ISBN 0-12-037104-9.
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
--- a/appveyor.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-cache:
-- "c:\\sr" # stack root, short paths == less problems
-
-# to disable automatic builds
-#build: off
-
-platform:
-- x86
-- x64
-
-environment:
-  global:
-    STACK_ROOT: "c:\\sr"
-
-install:
-- if %PLATFORM%==x86 (curl -ostack.zip -L --insecure http://www.stackage.org/stack/windows-i386) else (curl -ostack.zip -L --insecure http://www.stackage.org/stack/windows-x86_64)
-- 7z x stack.zip stack.exe
-- stack --resolver=lts-9.21 setup > nul
-- ps: |
-    choco --no-progress install wixtoolset -version 3.11.1 -y
-    $env:Path += ";${env:ProgramFiles}\WiX Toolset v3.11\bin"
-    $env:Path += ";${env:ProgramFiles(x86)}\WiX Toolset v3.11\bin"
-
-build_script:
-# The ugly echo "" hack is to avoid complaints about 0 being an invalid file
-# descriptor
-- echo "" | stack --resolver=lts-9.21 --no-terminal test --bench --no-run-benchmarks --flag CPL:Haskeline --flag CPL:-Readline
-
-after_test:
-- ps: cp "$(./stack --resolver=lts-9.21 path --local-install-root)/bin/cpl.exe" cpl.exe
-- cmd: |
-   cd windows
-   echo Creating msi...
-   ..\stack --resolver=lts-9.21 runhaskell --package turtle build_msi.hs
-   echo Creating zip...
-   ..\stack --resolver=lts-9.21 runhaskell --package turtle build_zip.hs
-   cd ..
-
-artifacts:
-- path: windows\*.msi
-  name: Windows Installer
-- path: windows\*.zip
-  name: Portable Binary Package
-
-deploy:
-- provider: GitHub
-  auth_token:
-    secure: F8cldz47mQ0lW3O9uCEneU5LRklWcKw8JbPuh5BDYA2TfyeqC//GO8vl8/wmBy3Z
-  artifact: Windows Installer, Portable Binary Package
-  force_update: true
-  release: $(appveyor_repo_tag_name)
-  on:
-    appveyor_repo_tag: true
diff --git a/build_bdist_linux.sh b/build_bdist_linux.sh
deleted file mode 100644
--- a/build_bdist_linux.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-export CABALVER=1.22
-export GHCVER=7.10.2
-
-sudo add-apt-repository -y ppa:hvr/ghc
-sudo apt-get update
-
-sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER
-export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:~/.cabal/bin:$PATH
-sudo apt-get install happy-1.19.4 alex-3.1.3
-export PATH=/opt/alex/3.1.3/bin:/opt/happy/1.19.4/bin:$PATH
-
-cabal sandbox init
-cabal update
-cabal install --only-dependencies -f-Haskeline -f-Readline
-cabal configure -fLinuxStatic -f-Haskeline -f-Readline
-cabal build
-
-VER=`ghc -e ":m + Control.Monad Distribution.Package Distribution.PackageDescription Distribution.PackageDescription.Parse Distribution.Verbosity Data.Version" -e 'putStrLn =<< liftM (showVersion . pkgVersion . package . packageDescription) (readPackageDescription silent "CPL.cabal")'`
-OS=`ghc -e ":m +System.Info" -e "putStrLn os"`
-ARCH=`ghc -e ":m +System.Info" -e "putStrLn arch"`
-
-PKG=CPL-${VER}-${OS}-${ARCH}
-
-rm -r $PKG
-mkdir -p $PKG/bin
-cp dist/build/cpl/cpl $PKG/bin
-cp CHANGELOG.markdown COPYING README.markdown $PKG/
-cp -a samples $PKG
-tar Jcf $PKG.tar.xz $PKG --owner=sakai --group=sakai
diff --git a/misc/build_zip.hs b/misc/build_zip.hs
deleted file mode 100644
--- a/misc/build_zip.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# OPTIONS_GHC -Wall #-}
-{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-}
-import Control.Exception
-import Control.Monad
-import Data.String
-import Distribution.Package
-import Distribution.PackageDescription
-import Distribution.PackageDescription.Parse
-import Distribution.Verbosity
-import Distribution.Version
-import qualified System.Info as SysInfo
-import System.Process
-import Turtle hiding (FilePath)
-
-getGitHash :: IO (Maybe String)
-getGitHash =
-  liftM (Just . takeWhile (/='\n')) (readProcess "git" ["rev-parse", "--short", "HEAD"] "")
-  `catch` \(_::SomeException) -> return Nothing
-
-getVersion :: FilePath -> IO Version
-getVersion cabalFile = do
-  pkg <- readPackageDescription silent cabalFile
-  return $ pkgVersion $ package $ packageDescription $ pkg
-
-main :: IO ()
-main = do
-  gitHashMaybe <- getGitHash
-  version <- getVersion "CPL.cabal"
-  let suffix_githash =
-        case gitHashMaybe of
-          Nothing -> ""
-          Just gitHash -> "_" ++ gitHash
-      dir :: IsString a => a
-      dir = fromString $ "CPL-" ++ showVersion version ++ suffix_githash ++ "-" ++ SysInfo.os ++ "-" ++ SysInfo.arch
-
-  let binDir = dir </> "bin"
-      samplesDir = dir </> "samples"
-      zipFile :: IsString a => a
-      zipFile = fromString (dir ++ ".zip")
-  testfile zipFile >>= \b -> when b (rm zipFile)
-  testfile dir >>= \b -> when b (rmtree dir)
-  mktree dir
-  mktree binDir
-  mktree samplesDir
-  cp ("cpl") (binDir </> "cpl")
-  sh $ do
-    fpath <- ls "samples"
-    cp fpath (samplesDir </> filename fpath)
-  cp "COPYING" (dir </> "COPYING")
-  cp "README.markdown" (dir </> "README.markdown")
-  cp "CHANGELOG.markdown" (dir </> "CHANGELOG.markdown")
-  procs "zip" ["-r", zipFile, dir] empty
-  return ()
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -30,6 +30,7 @@
 import System.Environment
 import System.Exit
 import System.IO
+import Control.Monad
 import Control.Monad.Except
 import Control.Monad.State.Strict -- haskeline's MonadException requries strict version
 import System.Console.GetOpt
diff --git a/src/Simp.hs b/src/Simp.hs
--- a/src/Simp.hs
+++ b/src/Simp.hs
@@ -26,6 +26,7 @@
 import qualified FE
 import Exp (Id)
 import Type
+import Control.Monad
 import Control.Monad.RWS
 import Data.Array
 import qualified Data.Map as Map
diff --git a/src/Typing.hs b/src/Typing.hs
--- a/src/Typing.hs
+++ b/src/Typing.hs
@@ -25,6 +25,7 @@
 
 import Data.List (nub)
 import Control.Applicative
+import Control.Monad
 import Control.Monad.Except
 import Control.Monad.RWS
 import qualified Data.Map as Map
diff --git a/windows/COPYING.rtf b/windows/COPYING.rtf
deleted file mode 100644
Binary files a/windows/COPYING.rtf and /dev/null differ
diff --git a/windows/CPL.wxs b/windows/CPL.wxs
deleted file mode 100644
--- a/windows/CPL.wxs
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<?if $(sys.BUILDARCH)=x64 ?>
-  <?define Win64 = "yes" ?>
-  <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
-<?else ?>
-  <?define Win64 = "no" ?>
-  <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
-<?endif ?>
-
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
-    <Product Id="AD35BCFF-05F9-4467-B922-B9F76EAB2B1F" Name="Categorical Programming Language" Language="1033" Version="0.0.8.0" Manufacturer="Masahiro Sakai" UpgradeCode="8DBD2D7D-6114-4C47-A307-DD99483568C5">
-        <Package Description="This package is an implementation of &quot;A Categorical Programing Language&quot; (CPL for short) written in Haskell" Comments="Categorical Programming Language" InstallerVersion="200" Compressed="yes" />
-        <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
-        <Directory Id="TARGETDIR" Name="SourceDir">
-            <Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles">
-                <Directory Id="INSTALLDIR" Name="CPL">
-                    <Directory Id="BINDIR" Name="bin">
-                        <Component Id="MainExecutable" Guid="6E979ACB-D17F-4C9D-8BA0-041FD0D5E987">
-                            <File Id="cplEXE" Name="cpl.exe" Source="..\cpl.exe" />
-                        </Component>
-                    </Directory>
-                    <Directory Id="SAMPLES" Name="samples">
-                        <Component Id="ACK.CPL" DiskId="1" Guid="28C7FD0E-9061-4392-9523-CBF65012F4CD">
-                            <File Id="ACK.CPL" Name="ack.cpl" Source="..\samples\ack.cpl" />
-                        </Component>
-                        <Component Id="ACK_3_4.CPL" DiskId="1" Guid="DC20AC75-DA73-49EA-8960-48B25DA166DB">
-                            <File Id="ACK_3_4.CPL" Name="ack_3_4.cpl" Source="..\samples\ack_3_4.cpl" />
-                        </Component>
-                        <Component Id="AUTOMATA.CDT" DiskId="1" Guid="FFD53683-7D82-4396-8649-0458BA2D695E">
-                            <File Id="AUTOMATA.CDT" Name="automata.cdt" Source="..\samples\automata.cdt" />
-                        </Component>
-                        <Component Id="BENCHMARK.CPL" DiskId="1" Guid="CE930ED5-1D88-4DA9-9BCD-D58C78A9E727">
-                            <File Id="BENCHMARK.CPL" Name="benchmark.cpl" Source="..\samples\benchmark.cpl" />
-                        </Component>
-                        <Component Id="CCC.CDT" DiskId="1" Guid="20974E7A-8454-406F-83B9-83ED7E582B8B">
-                            <File Id="CCC.CDT" Name="ccc.cdt" Source="..\samples\ccc.cdt" />
-                        </Component>
-                        <Component Id="EXAMPLES.CPL" DiskId="1" Guid="A4AF9E9F-E4E5-41A2-8BD4-2A6D271E7334">
-                            <File Id="EXAMPLES.CPL" Name="examples.cpl" Source="..\samples\examples.cpl" />
-                        </Component>
-                        <Component Id="EXAMPLES.TXT" DiskId="1" Guid="7D36629F-D94D-4080-BFC3-1EA5FBD05B33">
-                            <File Id="EXAMPLES.TXT" Name="examples.txt" Source="..\samples\examples.txt" />
-                        </Component>
-                        <Component Id="FUNCTION.CPL" DiskId="1" Guid="2C24BD6E-F9AB-4523-B778-07258DDA11F5">
-                            <File Id="FUNCTION.CPL" Name="function.cpl" Source="..\samples\function.cpl" />
-                        </Component>
-                        <Component Id="MISC.CDT" DiskId="1" Guid="C48F939A-D014-43EF-8631-0C8541A8A7FF">
-                            <File Id="MISC.CDT" Name="misc.cdt" Source="..\samples\misc.cdt" />
-                        </Component>
-                        <Component Id="OBSCURE.CDT" DiskId="1" Guid="FCE812CA-5688-4ABA-BB34-93895E098424">
-                            <File Id="OBSCURE.CDT" Name="obscure.cdt" Source="..\samples\obscure.cdt" />
-                        </Component>
-                        <Component Id="REC.CDT" DiskId="1" Guid="0C90FF11-FA31-44D4-8DD5-7D2B96D10B47">
-                            <File Id="REC.CDT" Name="rec.cdt" Source="..\samples\rec.cdt" />
-                        </Component>
-                    </Directory>
-                    <Component Id="ReadmeFile" Guid="EF38BFDC-5DF3-4F57-8307-75F91183FECF">
-                        <File Id="READMEMD" Name="README.markdown" Source="..\README.markdown" />
-                    </Component>
-                    <Component Id="LicenseFile" Guid="0019EBA5-97D6-44F3-A451-84D8D9D4F89E">
-                        <File Id="COPYING" Name="COPYING" Source="..\COPYING" />
-                    </Component>
-                    <Component Id="ChangeLogFile" Guid="778D69A3-F428-44DD-B9CD-55F976D98F33">
-                        <File Id="CHANGELOGMD" Name="CHANGELOG.markdown" Source="..\CHANGELOG.markdown" />
-                    </Component>
-                </Directory>
-            </Directory>
-        </Directory>
-        <Feature Id="DefaultFeature" Title="Main Feature" Level="1">
-            <ComponentRef Id="MainExecutable" />
-            <ComponentRef Id="ACK.CPL" />
-            <ComponentRef Id="ACK_3_4.CPL" />
-            <ComponentRef Id="AUTOMATA.CDT" />
-            <ComponentRef Id="BENCHMARK.CPL" />
-            <ComponentRef Id="CCC.CDT" />
-            <ComponentRef Id="EXAMPLES.CPL" />
-            <ComponentRef Id="EXAMPLES.TXT" />
-            <ComponentRef Id="FUNCTION.CPL" />
-            <ComponentRef Id="MISC.CDT" />
-            <ComponentRef Id="OBSCURE.CDT" />
-            <ComponentRef Id="REC.CDT" />
-            <ComponentRef Id="ReadmeFile" />
-            <ComponentRef Id="LicenseFile" />
-            <ComponentRef Id="ChangeLogFile" />
-        </Feature>
-        <UI />
-        <UIRef Id="WixUI_InstallDir" />
-        <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
-        <WixVariable Id="WixUILicenseRtf" Value="COPYING.rtf" />
-    </Product>
-</Wix>
diff --git a/windows/build_msi.hs b/windows/build_msi.hs
deleted file mode 100644
--- a/windows/build_msi.hs
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# OPTIONS_GHC -Wall #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-import Control.Exception
-import Control.Monad
-import Data.Version
-import Distribution.Package
-import Distribution.PackageDescription
-import Distribution.PackageDescription.Parse
-import Distribution.Verbosity
-import qualified System.Info as SysInfo
-import System.Process
-
-getGitHash :: IO (Maybe String)
-getGitHash =
-  liftM (Just . takeWhile (/='\n')) (readProcess "git" ["rev-parse", "--short", "HEAD"] "")
-  `catch` \(_::SomeException) -> return Nothing
-
-getVersion :: FilePath -> IO Version
-getVersion cabalFile = do
-  pkg <- readPackageDescription silent cabalFile
-  return $ pkgVersion $ package $ packageDescription $ pkg
-
-main :: IO ()
-main = do
-  gitHashMaybe <- getGitHash
-  version <- getVersion "../CPL.cabal"
-  let suffix_githash =
-        case gitHashMaybe of
-          Nothing -> ""
-          Just gitHash -> "_" ++ gitHash
-      msiFileName = "CPL-" ++ showVersion version ++ suffix_githash ++ "-" ++ SysInfo.os ++ "-" ++ SysInfo.arch ++ ".msi"
-      arch =
-        case SysInfo.arch of
-          "x86_64" -> "x64"
-          "i386" -> "x86"
-          s -> s
-  callProcess "candle" $ ["-arch", arch, "CPL.wxs"]
-  callProcess "light" ["-ext", "WixUIExtension", "-out", msiFileName, "CPL.wixobj"]
-  return ()
diff --git a/windows/build_zip.hs b/windows/build_zip.hs
deleted file mode 100644
--- a/windows/build_zip.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# OPTIONS_GHC -Wall #-}
-{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-}
-import Control.Exception
-import Control.Monad
-import Data.String
-import Data.Version
-import Distribution.Package
-import Distribution.PackageDescription
-import Distribution.PackageDescription.Parse
-import Distribution.Verbosity
-import qualified System.Info as SysInfo
-import System.Process
-import Turtle hiding (FilePath)
-
-getGitHash :: IO (Maybe String)
-getGitHash =
-  liftM (Just . takeWhile (/='\n')) (readProcess "git" ["rev-parse", "--short", "HEAD"] "")
-  `catch` \(_::SomeException) -> return Nothing
-
-getVersion :: FilePath -> IO Version
-getVersion cabalFile = do
-  pkg <- readPackageDescription silent cabalFile
-  return $ pkgVersion $ package $ packageDescription $ pkg
-
-main :: IO ()
-main = do
-  gitHashMaybe <- getGitHash
-  version <- getVersion "../CPL.cabal"
-  let suffix_githash =
-        case gitHashMaybe of
-          Nothing -> ""
-          Just gitHash -> "_" ++ gitHash
-      dir :: IsString a => a
-      dir = fromString $ "CPL-" ++ showVersion version ++ suffix_githash ++ "-" ++ SysInfo.os ++ "-" ++ SysInfo.arch
-
-  let binDir = dir </> "bin"
-      samplesDir = dir </> "samples"
-      zipFile :: IsString a => a
-      zipFile = fromString (dir ++ ".zip")
-  testfile zipFile >>= \b -> when b (rm zipFile)
-  testfile dir >>= \b -> when b (rmtree dir)
-  mktree dir
-  mktree binDir
-  mktree samplesDir
-  cp ("../cpl.exe") (binDir </> "cpl.exe")
-  sh $ do
-    fpath <- ls "../samples"
-    cp fpath (samplesDir </> filename fpath)
-  cp "../COPYING" (dir </> "COPYING")
-  cp "../README.markdown" (dir </> "README.markdown")
-  cp "../CHANGELOG.markdown" (dir </> "CHANGELOG.markdown")
-  procs "7z" ["a", "-r", zipFile, dir] empty
-  return ()
