packages feed

CPL 0.0.9 → 0.1.0

raw patch · 14 files changed

+51/−455 lines, 14 filesdep ~mtl

Dependency ranges changed: mtl

Files

− .travis.yml
@@ -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"
CHANGELOG.markdown view
@@ -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.
CPL.cabal view
@@ -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)
README.markdown view
@@ -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.
− appveyor.yml
@@ -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
− build_bdist_linux.sh
@@ -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
− misc/build_zip.hs
@@ -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 ()
src/Main.hs view
@@ -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
src/Simp.hs view
@@ -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
src/Typing.hs view
@@ -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
− windows/COPYING.rtf

binary file changed (1818 → absent bytes)

− windows/CPL.wxs
@@ -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>
− windows/build_msi.hs
@@ -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 ()
− windows/build_zip.hs
@@ -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 ()