1
1

More than 1 year has passed since last update.

「え‼︎Google ColabolatoryでHaskellを⁉︎」「出来らあっ!」

Last updated at Posted at 2023-06-07

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]

結局何をやったのか

  1. コマンドモードでghcのダウンロード
  2. コマンドモードでghcのパスを通す(お好みで)
  3. コマンドモードで必要なライブラリをダウンロード
  4. コマンドモードでHaskell用のディレクトリを作成(お好みで)
  5. Haskellのソースファイルを作成
  6. コマンドモードでソースファイルをコンパイル
  7. コマンドモードでオブジェクトファイルやインターフェースファイルを消す(お好みで)
  8. コマンドモードで実行確認

最後に

今回はHaskellで話しましたが、コマンドラインからコンパイラをダウンロードできる系の言語全てに応用が効きます。
厄介な開発環境の構築を省略できるので受講者に体験をしてもらうハンズアウトにぴったりだと思います。

追記

コメントを受けて、特に興味が惹かれたものを以下に追記します。

「PATHはPython側で環境変数をいじればいけるよ」

ColabolatoryではsourceコマンドなどでPATHを更新することができなかったのですが、Pythonのosモジュールを使うことで解決できました。
こっちの方がcopyよりもお行儀が良さそうなのでこっちを使うように変更しました。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1