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


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

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

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

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

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

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

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

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
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 ~ % 

これでうまくいった

Terminal
electron@diynoMacBook-Pro ~ % cabal get CPL    
Unpacking to CPL-0.0.9/
electron@diynoMacBook-Pro ~ %
  • カレントディレクトリの直下に、「CPL-0.0.9」ディレクトリが作られた。
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がかわりに使われるので問題ありませんでした。

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コマンドは、認識されない

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と打つ必要がある

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 % 
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'を書き込む
Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % vim $HOME/.bash_rc
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ファイルを読み込む
Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % source $HOME/.bash_rc
  • bash_profileに、source ~/.bash_rcを書き込む
Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % vim $HOME/.bash_profile
Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cat $HOME/.bash_profile
( 省略 )

source ~/.bash_rc
electron@diynoMacBook-Pro CPL-0.0.9 %
Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % source $HOME/.bash_profile
( 省略 )

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

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

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 % 
Terminal
electron@diynoMacBook-Pro CPL-0.0.9 % cpl --version
0.0.9
electron@diynoMacBook-Pro CPL-0.0.9 %

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

同じ略語のCPL(Combined Programming Language)とは違います。