fugafuga.write

日々のログ

heroku に master 以外の branch を push

git push heroku my-dev-branch:master

git push するときに ssh key を指定する

git

おなじみの direnv を使う。 .envrc をリポジトリがあるディレクトリに置いて下記を書く。 export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_for_github_private -F /dev/null" direnv allowすると環境変数が設定される。

仕事用PCでのGithubアカウントの切り替え

git

まず brew で direnv 入れる 仕事用のディレクトリを作成し、.envrcとして以下のファイルを設置 NAME="<仕事用のアカウントID>" MAIL="<仕事用のemail address>" export GIT_COMMITTER_NAME=$NAME export GIT_COMMITTER_EMAIL=$MAIL export GIT_AUTHOR_NAME=…

すごいH本 part100

ある男の物語

すごいH本 part99

Zipper Haskellで木構造の要素を変更したい場合、ルート要素から指定の要素が見つかるまで探索が必要になる。 また、前回更新した要素の近くの要素を更新したい場合などでもルートから探す必要がある。 これは効率が悪い。 そこでZipperを使ってデータ構造の…

すごいH本 part98

モナドを作る モナドは作りたいと思って作るものではない。 ある問題の側面をモデル化した型を作り、 後からその型が文脈付きの値を表現していてモナドのように振る舞うとわかった場合に、 Monadインスタンスを与える場合が多い。 リスト [3,5,9] を、整数3,…

すごいH本 part97

安全な逆ポーランド記法電卓をつくる 前に作ったRPN電卓にエラー機能をつける。 import Control.Monad solveRPN :: String -> Maybe Double solveRPN st = do [result] <- foldM foldingFunction [] $ words st return result foldingFunction :: [Double] -…

すごいH本 part96

便利なモナディック関数 モナドを扱う関数はモナディック関数と呼ばれる。 liftM 関数とモナド値をとって、関数でモナド値を写してくれる。 fmapっぽい。 liftM :: Monad m => (a1 -> r) -> m a1 -> m r fmap の型 fmap :: Functor f => (a -> b) -> f a -> …

すごいH本 part95

Eitherモナド Maybeモナドは値に失敗するかもしれないという文脈をつけられる。 Eitherモナドも失敗の文脈を扱える。しかも、失敗に値を付加できるので失敗の説明ができたりする。 Either e a は、Right値であれば正解や計算の成功、Left値であれば失敗を表…

すごいH本 part94

計算の状態 状態を扱うためにHaskellにはStateモナドが用意されている。 状態付きの計算 状態付きの計算とは、ある状態を取って、更新された状態と一緒に計算結果を返す関数として表現できる。 s -> (a, s) s は状態の型で、 a は状態付き計算の結果。 この…