slack-api + bloodhound + servant でbot+αを作る

Haskell (その2) Advent Calendar 2017 (7日目)の記事です。 Advent Calendarのネタ探しに何か作ろうと思った。 slack上のQA形式の知見を手動でまとめていき、後から参照しやすくするbotを作りたいと思った。 (リリースまで行けなかった。次の休みには公開してリンク貼ります。。無念 ) => 追記2017-12-29: 作ったやつ => https://slacknowledge.pig-brewing.com/ 特にすごいことはなく普通にサービスを作ってしまったので、使ったライブラリとその使い方などを紹介したいと思います。 主なやったことは次の3点: slack botを作る »

HaskellでSESを使って添付ファイル付メールを送る

SESでのメール送信に関連するライブラリの紹介記事です。 SESで添付ファイル付メールを送るにはSendRawEmailアクションを使用する。この時メールのフォーマットを組み立てる必要が有るため、自力で全部やるのは厳しい。 次のライブラリを使用した。 amazonka-ses, amazonka 包括的なAWSのSDK。その内のSESに対するアクション。 mime-mail MIMEを扱うためのライブラリ。これを使いSendRawEmailに送るメールのデータを作成する。 heterocephalus 型安全なテンプレートエンジン。本題からはそれるが、メール本文の作成に使用。 mime-mail Mail 型の値を組み立てて、renderMailでByteStringを作成(renderMail'でboundaryランダム生成)。 Mailの組み立てに幾つかの便利関数が用意されている。 {-# LANGUAGE OverloadedStrings #-} »

循環プログラミングに驚いた(repmin problem)

GHC拡張RecursiveDoが何か知りたく、https://ocharles.org.uk/blog/posts/2014-12-09-recursive-do.html この記事を読んだ。 RecursiveDoに到達する以前に単に遅延評価に衝撃を受けたのでシェアさせていただきます。 repmin problem というもの。 何らかのtraversableなもの、例えば次のような木構造を、 Tree 4 [Tree 6 [], Tree 2 []] 木構造内の一番小さい値をつかって更新したい、 Tree 2 [Tree »

GHCでCall Stackを表示する

テストのassertationやエラーログなどで使う。 GHC.Stackを使うとstackを取得できる。 {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ImplicitParams #-} import Data.Text (Text) import GHC.Stack main = do putStrLn "before error" printStack - line »