圏論プログラミング言語 CPLをMacbookで使う


__*cabal get CPL*__で、Macbookに圏論プログラミング言語 CPL：*Categorical Programming Language*をインストールしました。CPL言語については、以下がわかりやすいです。

https://mandel59.hateblo.jp/entry/2015/02/02/110621

今回インストールしたのは、CPLのHaskell実装です。

https://hackage.haskell.org/package/CPL

CPLは、萩野さんという日本人が開発した言語です。

http://web.sfc.keio.ac.jp/~hagino/

萩野さんがエディンバラ大学に提出されたCPL言語を取り扱った博士論文です。

http://web.sfc.keio.ac.jp/~hagino/thesis.pdf

###Macbookへのインストール： 参考にしたウェブページ

次のウェブページに従って、Macbookにサクッとインストールできました。

https://mandel59.hateblo.jp/entry/2015/02/02/223147

以下の記事では、Hasklell実装ではなく、「VAX UNIX 4.2 上で Franz Lisp を使って実装されている」オリジナルのCPLをインストールする方法が説明されています。ここで解説されているMacbookへのインストール手順は、骨の折れる作業です。

https://qiita.com/dico_leque/items/b25f210eb0ff3156a8f3


```bash:Terminal
electron@diynoMacBook-Pro ~ % cabal --version
cabal-install version 3.6.0.0
compiled using version 3.6.1.0 of the Cabal library 
electron@diynoMacBook-Pro ~ % 
```

##これはうまくいかなかった

- cabal: Failed to build readline-1.0.3.0 (which is required by exe:cpl from

```bash:Terminal
electron@diynoMacBook-Pro ~ % cabal install CPL
Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
 - readline-1.0.3.0 (lib:readline) (requires download & build)
 - CPL-0.0.9 (exe:cpl) (requires build)
Downloading  readline-1.0.3.0
Downloaded   readline-1.0.3.0
Starting     readline-1.0.3.0 (all, legacy fallback)

Failed to build readline-1.0.3.0. The failure occurred during the configure
step.
Build log ( /Users/electron/.cabal/logs/ghc-8.10.7/rdln-1.0.3.0-9ae95c30.log ):
Warning: readline.cabal:27:32: version operators used. To use version
operators the package needs to specify at least 'cabal-version: >= 1.8'.
Warning: readline.cabal:9:3: Tabs used as indentation at 9:3, 10:3, 12:3,
13:3, 15:3, 16:3
Configuring readline-1.0.3.0...
checking for gcc... /usr/bin/clang
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /usr/bin/clang accepts -g... yes
checking for /usr/bin/clang option to accept ISO C89... none needed
checking for GNUreadline.framework... checking for readline... no
checking for tputs in -lncurses... yes
checking for readline in -lreadline... yes
checking for rl_readline_version... yes
checking for rl_begin_undo_group... no
configure: error: readline not found, so this package cannot be built
See `config.log' for more details.
cabal: Failed to build readline-1.0.3.0 (which is required by exe:cpl from
CPL-0.0.9). See the build log above for details.

electron@diynoMacBook-Pro ~ % 
```

##これでうまくいった

```bash:Terminal
electron@diynoMacBook-Pro ~ % cabal get CPL    
Unpacking to CPL-0.0.9/
electron@diynoMacBook-Pro ~ %
```

- カレントディレクトリの直下に、「CPL-0.0.9」ディレクトリが作られた。

```bash:Terminal
electron@diynoMacBook-Pro ~ % ls CPL-0.0.9
CHANGELOG.markdown	README.markdown		build_bdist_linux.sh	src
COPYING			Setup.hs		misc			windows
CPL.cabal		appveyor.yml		samples
electron@diynoMacBook-Pro ~ % 
```

- cdして、cabal install --bindir ~/.cabal/bin --datadir ~/.cabal/share -f -Readlineを実行

（ 参考 ）
https://mandel59.hateblo.jp/entry/2015/02/02/223147

> 自分の環境ではreadlineが使えなかったので、-f -Readlineオプションを指定しています。Readlineが使えなくても、Haskelineがかわりに使われるので問題ありませんでした。

```bash:Terminal
electron@diynoMacBook-Pro ~ % cd CPL-0.0.9
electron@diynoMacBook-Pro CPL-0.0.9 % 
electron@diynoMacBook-Pro CPL-0.0.9 % cabal install --bindir ~/.cabal/bin --datadir ~/.cabal/share -f -Readline
Wrote tarball sdist to
/Users/electron/CPL-0.0.9/dist-newstyle/sdist/CPL-0.0.9.tar.gz
Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
 - CPL-0.0.9 (exe:cpl) (requires build)
Starting     CPL-0.0.9 (exe:cpl)
Building     CPL-0.0.9 (exe:cpl)
Installing   CPL-0.0.9 (exe:cpl)
Completed    CPL-0.0.9 (exe:cpl)
Symlinking 'cpl' to '/Users/electron/.cabal/bin/cpl'
electron@diynoMacBook-Pro CPL-0.0.9 % 
```

###cplコマンドは、認識されない

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cpl --version
zsh: command not found: cpl
electron@diynoMacBook-Pro CPL-0.0.9 %
```

###フルパスで、*/Users/electron/.cabal/bin/cpl*と打つ必要がある

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % ls /Users/electron/.cabal/bin/cpl
/Users/electron/.cabal/bin/cpl
electron@diynoMacBook-Pro CPL-0.0.9 % 
```


```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % /Users/electron/.cabal/bin/cpl
Categorical Programming Language (Haskell version)
version 0.0.9

Type help for help

cpl> help
  exit                        exit the interpreter
  quit                        ditto
  bye                         ditto
  edit                        enter editing mode
  simp [full] <exp>           evaluate expression
  show <exp>                  print type of expression
  show object <functor>       print information of functor
  load <filename>             load from file
  set trace [on|off]          enable/disable trace
  reset                       remove all definitions
cpl> 
cpl> bye
electron@diynoMacBook-Pro CPL-0.0.9 %
```

###エイリアスを張る

- フルパスのコマンドを、cplで叩けるようにする
- bash_rcに、alias cpl='/Users/electron/.cabal/bin/cpl'を書き込む

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % vim $HOME/.bash_rc
```

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cat $HOME/.bash_rc

（ 省略 ）

alias cpl='/Users/electron/.cabal/bin/cpl'
electron@diynoMacBook-Pro CPL-0.0.9 %
```

- bash_rcファイルを読み込む

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % source $HOME/.bash_rc
```

- bash_profileに、source ~/.bash_rcを書き込む

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % vim $HOME/.bash_profile
```

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cat $HOME/.bash_profile
（ 省略 ）

source ~/.bash_rc
electron@diynoMacBook-Pro CPL-0.0.9 %
```

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % source $HOME/.bash_profile
（ 省略 ）

source ~/.bash_rc
electron@diynoMacBook-Pro CPL-0.0.9 %
```

##cplコマンドでCPL言語のインタプリタを起動できた

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cpl
Categorical Programming Language (Haskell version)
version 0.0.9

Type help for help

cpl> help
  exit                        exit the interpreter
  quit                        ditto
  bye                         ditto
  edit                        enter editing mode
  simp [full] <exp>           evaluate expression
  show <exp>                  print type of expression
  show object <functor>       print information of functor
  load <filename>             load from file
  set trace [on|off]          enable/disable trace
  reset                       remove all definitions
cpl> bye
electron@diynoMacBook-Pro CPL-0.0.9 % 
```

```bash:Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cpl --version
0.0.9
electron@diynoMacBook-Pro CPL-0.0.9 %
```

##CPL言語についてのリファレンス

https://mandel59.hateblo.jp/entry/2015/02/02/110621

https://ja.wikipedia.org/wiki/CPL_(%E5%9C%8F%E8%AB%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)

同じ略語のCPL（*Combined Programming Language*）とは違います。

https://www.weblio.jp/content/CPL+%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%29