Haskell on Colabolatory
まえがき
Colabolatoryって便利ですよね。手軽にコードを試せて助かってます。
そんなある日、大学の課題でこんなものが出ました。
サポートベクターマシンを使ったクラス識別がColabolatoryで使って出来るから試してみてね(超意訳)
情報工学系の大学生のとってはさして珍しくもない課題です。まあこういう文脈で語られるColabolatoryとは大抵お手軽なPythonの実行環境のことです。
そんな中、私は何を血迷ったのかHaskellの機械学習のことに思いを馳せていました。
そして気がついた時にはColabolatory Haskell
で検索をしていました。
結論
以下のコードをそれぞれ別のセルにコピペして順番に実行するとHaskellで書いたコードが動くことがわかります。
ghc
のダウンロード
!curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | env BOOTSTRAP_HASKELL_NONINTERACTIVE=1 sh # download ghcup
!apt-get install libgmp3-dev # download library for lgmp
!mkdir -p Haskell/{src,bin} # make directory for Haskell
import os
os.environ["PATH"] = os.environ["HOME"] + "/.ghcup/bin:" + os.environ["PATH"] # specify path
Haskellのソースファイルの生成
# write code in Haskell/src/hello.hs
%%file Haskell/src/hello.hs
main = do
putStr "Hello "
putStrLn "Haskell!"
Haskellのソースファイルをghc
でコンパイル
!ghc Haskell/src/hello.hs -o Haskell/bin/hello # compile Haskell file
!rm Haskell/src/*.{hi,o} # remove object file and interface file
!./Haskell/bin/hello # execute hello
Colabolatoryで使った機能
今回はPythonのコードを書かない代わりにColabolatoryの機能をいくつか使いました。
コマンドラインモードを使える
Colabolatoryではコマンドラインモードが使えます。
!ls
のようにコマンドの前に!
を入力することで以降をコマンドラインモードとして認識させることができます。
ghc
のダウンロードなどにはこれを使っています。ただし私の勘違いかもしれませんが一部のコマンドはうまく動作しないみたいです。
特にパスを通すのがうまくいかなかったのでghc
をパスが通ってる場所にcopyする結果となりました。
パスを通す場合は追記の記載を確認してください。
参考にする方はこの点に注意してください。
ファイルの書き出しが容易にできる
Colabolatoryでは以下のようにすることでファイルを生成することができます。
%%file [filename]
[code]
結局何をやったのか
- コマンドモードで
ghc
のダウンロード - コマンドモードで
ghc
のパスを通す(お好みで) - コマンドモードで必要なライブラリをダウンロード
- コマンドモードでHaskell用のディレクトリを作成(お好みで)
- Haskellのソースファイルを作成
- コマンドモードでソースファイルをコンパイル
- コマンドモードでオブジェクトファイルやインターフェースファイルを消す(お好みで)
- コマンドモードで実行確認
最後に
今回はHaskellで話しましたが、コマンドラインからコンパイラをダウンロードできる系の言語全てに応用が効きます。
厄介な開発環境の構築を省略できるので受講者に体験をしてもらうハンズアウトにぴったりだと思います。
追記
コメントを受けて、特に興味が惹かれたものを以下に追記します。
「PATHはPython側で環境変数をいじればいけるよ」
Colabolatoryではsource
コマンドなどでPATHを更新することができなかったのですが、Pythonのosモジュールを使うことで解決できました。
こっちの方がcopy
よりもお行儀が良さそうなのでこっちを使うように変更しました。