はじめに

最近 slack で Lambdabot というツールを知りました。こいつを導入するとこんな事ができます。

Lambdabot と遊んでいる図
Lambdabot と遊んでいる図

実務で本格的に使えるものではありませんが、入れてみると楽しいですよ。(カスタマイズして改良すれば、かなり使えるかもしれない)

Lambdabot の導入

導入はとても簡単で slack app から Lambdabot をインストールするだけです!

Slack app で検索
Slack app で検索
Lambdabot のインストール画面
Lambdabot のインストール画面

検索するのが面倒な人は Add Lambdabot to Slack の App ボタンからもインストール可能です。

アプリのソースコード等は markandrus/slack-lambdabot にありますので、気になる方はこちらもご参照ください。

自分でビルドしてホスティングする場合は fork の ezoerner/slack-lambdabot の方が良いかもしれません。(要検証)

Lambdabot for Slack でできること

どうやら本家の Lambdabot の機能全てが使えるわけではないようです。

また、利用可能な機能のうち typehoogle等はちゃんと使えるようですが、runcheck などは結果がおかしい場合があります。

hoogle

どうやら結果は3件しか返さないようです。

関数名で検索
関数名で検索
型名で検索
型名で検索
型で検索 (型変数有り)
型で検索 (型変数有り)
型で検索 (型変数無し)
型で検索 (型変数無し)

type

どのパッケージが含まれているかわかりませんが、lens の演算子を試したところだめでした。

関数
関数
メソッド
メソッド
複雑な式
複雑な式
演算子
演算子
セクション
セクション
エラー
エラー

run

式を実行することができるようですが、全然動かないです。

print はエラー
print はエラー
奇跡的に動いた例
奇跡的に動いた例
文字列を含む場合にはエラーになる
文字列を含む場合にはエラーになる
無限リストは適当に打ち切り
無限リストは適当に打ち切り

check

QuickCheck も実行可能ですが、上手く行く例が作れません・・・。

実行時間の制約に引っかかってるっぽい
実行時間の制約に引っかかってるっぽい

free

たぶん実装は FreeTheorem.hs です。

良くわからないので解説できません。実行結果だけ貼っておきます。

reverse
reverse
const
const
id
id
flip
flip
filter
filter

pl

ポイントフリーにしてくれます。また fusion もいくつか可能っぽいです。

ポイントフリー化1
ポイントフリー化1
ポイントフリー化2
ポイントフリー化2
f . id = id
f . id = id
map f . map g = map (f . g)
map f . map g = map (f . g)

終わりに

ちゃんと作り込んだら結構使えそうな気がします。