タグ

ブックマーク / ryota-ka.hatenablog.com (11)

  • ユースケース層が投げうるエラーの型を「量化した open union」にしておけば複数のユースケースを合成したときに上の層でエラーハンドリングが楽にできて最高です! - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me この記事は Haskell Advent Calendar 2020 20日目の記事です. TL; DR タイトル 問題設定 ユースケース層とサーバ層が存在する Web アプリケーションを考える.サーバ層はユースケース層を呼び出すことができるが,ユースケース層はサーバ層について無知でなければならない. +----------------+ | server layer | +-------+--------+ | depends on +-------v--------+ | use case layer | +----------------+ このようなアプリケーションのAPI リクエストハンドラにおいて,複数のユースケースを合成して呼び出すケースを例に挙げ,それぞれのユースケースが投げうるエラーをうまく扱う o

    ユースケース層が投げうるエラーの型を「量化した open union」にしておけば複数のユースケースを合成したときに上の層でエラーハンドリングが楽にできて最高です! - ryota-ka's blog
  • 『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 前編はこちら ryota-ka.hatenablog.com §8 発話文脈・変項割当 という文を発話したとする.この文は,代名詞 と の2つの指示対象が発話の状況から明らかなときにのみ適切である.このように,文脈に依存して意味が初めて定まる言語表現を直示 (deixis) という.指示対象を明らかにするため,次のように代名詞に指標 (index) を振ることにする. と に と という異なる指標が割り当てられているのは,それらが相異なる外延をもつことを表している. 既に述べたように,この文の外延は および の指示対象が文脈から定まることで初めて計算することができる.このような文は自由変項*1を含んだ開いた項 (open term) として見做すことができる.このような発話に際しての状況を utterance con

    『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka's blog
  • 『形式意味論入門』を Haskell に書き下す (前編) - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 一昨年のゴールデンウィークに池袋のジュンク堂を訪れた際,『形式意味論入門』という表題のに目が止まり,数学や論理学を用いて自然言語表現の意味を形式的に考察する学問分野があることを知った*1.また,その道具立てとして単純型付きラムダ計算が用いられていることが,なおのこと私の興味を惹いた.ラムダ計算といえば,読者の多くが計算機科学分野での応用を思い浮かべると思うが,Richard Montague*2 が自然言語分野に応用して以来,そちらの方面でも道具立てとして用いられているようである. 形式意味論入門 (開拓社叢書) 作者:拓郎, 田中開拓社Amazon このは,Irene Heim と Angelika Kratzer による Semantics in Generative Grammar (以下 Heim and

    『形式意味論入門』を Haskell に書き下す (前編) - ryota-ka's blog
  • Nix で Haskell IDE Engine をシュッと入れる - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me みなさん,Haskell やってますか?普通に Haskell IDE Engine を入れようとするとビルドにメッチャ時間がかかって「地獄か?」という感じがするので,Nix でシュッと入れていきましょう. Nix のインストール Nix を入れていない人はいないと思うけど,念の為インストール手順です. 「Nixはこの会社以外で役に立つことはないけど、人生が豊かになるから勉強した方がいい」— ポアソン氏 (@hiroqn) June 28, 2019 $ curl https://nixos.org/nix/install | sh $ nix-channel --add https://nixos.org/channels/nixpkgs-unstable $ nix-channel --update Cachix

    Nix で Haskell IDE Engine をシュッと入れる - ryota-ka's blog
  • Template Haskell でいい感じに時間の長さを書けるライブラリ duration を作った - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me Template Haskell を使って,時間の長さをいい感じに(人間が読みやすい形で)記述できるライブラリを作った. hackage.haskell.org github.com (実は GW 前くらいには既に公開していたけど,ブログを書く余裕がなかった……) モチベーション JavaScript のライブラリに,ms というものがある. www.npmjs.com README を読めば一瞬で使い方が把握できるが,以下の様なことができる. ms('2 days') // 172800000 ソースコード中に 1000 * 60 * 60 * 24 * 2 などと記述するのも悪くはないが,やはり自然言語表現の方が読み手にとって親切だ. ただし,この方法には一つ問題があって,文字列はパーズに失敗しうる. > con

    Template Haskell でいい感じに時間の長さを書けるライブラリ duration を作った - ryota-ka's blog
  • Maybe と IO を一緒に使いたくなったら - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me たまには初学者向けにライトな話題を. 対象読者 すごいHを12章か13章ぐらいまでは読んだ do 構文を使って IO などの処理が書ける Haskell のプログラムはなんとなく書けるが,あまり綺麗に書けている気がしない IO の中で Maybe を使う 例として,以下のようなプログラムを考えてみよう. 2つの整数 a b を標準入力から1行ずつ順に読み込む a と b の和を標準出力に出力する 与えられた入力が整数でなかった場合には,その時点でエラーメッセージを出力し,プログラムを終了する これらの要件を満たすプログラムを素朴に実装するならば,以下のようになるだろう. import System.Exit (die) import Text.Read (readMaybe) readInt :: String -

    Maybe と IO を一緒に使いたくなったら - ryota-ka's blog
  • Template Haskell でコンパイル時 FizzBuzz - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 数ヶ月前に Twitter で,コンパイル時に FizzBuzz を計算して,実行時には計算された文字列を出力をするだけ,というコンパイル時 FizzBuzz を何かの言語でやっているのを見かけた.元ネタは江添さんがC++で書いたものらしい.インスピレーションを受けて,Haskell で書いてはみたが,簡単すぎて全然おもしろくなくなってしまった. コード GHC の制約*1により,モジュールを分割している. -- FizzBuzz.hs {-# LANGUAGE TemplateHaskell #-} module FizzBuzz (answerExpr) where import Language.Haskell.TH fizzbuzz :: Int -> String fizzbuzz n | n `mod`

    Template Haskell でコンパイル時 FizzBuzz - ryota-ka's blog
  • Template Haskell でコード中に JSON を埋め込んだりコンパイル時にファイルから型安全に読み込んだりする - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 前回よりはもう少し実用的な例を. Template Haskell を使って,Haskell のコード中に JSON をそのまま埋め込むことができるようにする.また,あらかじめ用意しておいた JSON ファイルをコンパイル時に読み込み,指定したデータ型の値にする. ToC コード中に JSON を埋め込む コンパイル時に JSON をファイルから型安全に読み込む 環境 stack --version Version 1.6.3 x86_64 hpack-0.20.0 $ stack ghc -- --version The Glorious Glasgow Haskell Compilation System, version 8.2.2 $ stack list-dependencies | grep -e aes

    Template Haskell でコード中に JSON を埋め込んだりコンパイル時にファイルから型安全に読み込んだりする - ryota-ka's blog
  • Type-level TypeScript - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me この記事は CAMPHOR- Advent Calendar 2017 の21日目の記事です. @ryota-ka です.普段は HERP という会社でリードエンジニアとして働いています.一昨日19日にサービスのティザーサイトを公開したばかりなので見てください. herp.cloud さて,12月といえば,万人受けしなさそうなネタでブログを書いては「はてブが付かねえ」と文句を言う季節ですが,今年もそういう方針で,TypeScript での型レベル計算について書きます.型レベルでの自然数などが定義できると,リストに型レベルで長さを付けることができて,空リストの先頭の要素を取ろうとしてランタイムで落ちる,という悲劇が生じる可能性をコンパイル時に排除できてとても嬉しいですね. なお,使用している TypeScript のバ

    Type-level TypeScript - ryota-ka's blog
  • 開発効率向上 tips vol.1 -ターミナル・シェル編- - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 最近弊社でも大学生のエンジニアインターンが増えてきて,彼らの成長のために,開発にあたっての知見を効率的に共有する手段を色々と模索している.こういった知見は再利用性も高く,社内に閉じている必要もまったくないので,こうしてブログに書き溜めていくことにしてみようかと思う.第一弾として,端末エミュレータ上でのオペレーションの効率化について記す. ソフトウェアの開発をやっていると,なんだかんだで端末エミュレータというインタフェースの上で,シェルを使ってオペレーションを行うことが多い.開発に用いるマシンの OS はたいてい macOSLinux の何かしらのディストリビューション (Ubuntu が多いか?) だし,プロダクション環境での運用は Linux を前提することが多いだろう.また,Docker の普及により,Li

    開発効率向上 tips vol.1 -ターミナル・シェル編- - ryota-ka's blog
  • エンジニアのためのTwitter クライアント、twterm v2 をリリースした - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me ターミナルエミュレータ上で動作する twterm の v2 をリリースした. twterm.ryota-ka.me これはなに 端末エミュレータ上で動作する Twitter クライアント.2015年1月ごろから細々と開発をしている.僕は普段 tmux でいくつも pane, window, session を作って作業をしているが,そのうちの一つで twterm を常に開いている.Text-based User Interface を採用していて,ターミナルから出ることなくインタラクティブに Twitter を眺めたり,ポストしたりできて便利. インストール $ gem install twterm ncurses と readline が有効化された Ruby ランタイムが必要. 変更点とか カスタマイズ可能なキー

    エンジニアのためのTwitter クライアント、twterm v2 をリリースした - ryota-ka's blog
  • 1