タグ

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

  • ユースケース層が投げうるエラーの型を「量化した 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
    xef
    xef 2020/12/20
  • 『形式意味論入門』を 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
  • Russell のパラドクスと λx.xx (または自己言及がもたらす豊かさと危うさについて) - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me お盆に数日の休みがあったので,Ludwig Wittgenstein の『論理哲学論考 (Tractatus Logico-Philosophicus)』を読み始めた.Wittgenstein の著作を読んでいると,彼が理論を継承し,また批判する対象となった Gottlob Frege や Bertrand Russell の思想にも同時に触れることになる. 『論考』の命題 3.3 以下に,Russell のパラドクスに対する解決策を提示し,Russell の主張を反駁する場面が見られるが,この記事ではむしろ,Russell 自身の回答である階型理論 (theory of types) による解決策に目を向けたい.我々が普段プログラムを記述する際に触れる型の概念が如何にして生まれ,発展してきたのかを見ていくこととしよ

  • 代数的データ型と初等代数学 - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,RustSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモ

    代数的データ型と初等代数学 - ryota-ka's blog
  • Coyoneda って…… お前 functor がデータ構造になっただけやんけ!! - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me operational (あるいは freer) と呼ばれているものの説明として, a) Coyoneda を使うと,kind が * -> * であるような任意の型から functor を作り出せる 任意の型 f :: * -> * について Coyoneda f は Functor のインスタンスになる b) Free を使うと,任意の functor から monad を作り出せる Functor のインスタンスである任意の型 f について Free f は Monad のインスタンスになる a と b を組み合わせると,適当な型 f :: * -> * から monad を作り出せて便利〜🙌 というストーリーが往々にして語られる*1. Free については既に多くの解説が存在するので,詳しい解説は他の記事を

    Coyoneda って…… お前 functor がデータ構造になっただけやんけ!! - ryota-ka's blog
    xef
    xef 2018/07/08
  • TypeFamilyDependencies の実用的な例を考える - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me FunctionalDependencies という GHC 言語拡張がある.Haskell Wiki によると, Functional dependencies are used to constrain the parameters of type classes. と書かれているが,これはどういうことか. Haskell Language Report で定められた範囲では,型クラスに与えられるパラメータは1つに限られるが,MultiParamTypeClasses を用いると,複数のパラメータを与えることができる.この際に,パラメータとして与えられた (複数の) 型の間の関係性に制限を加えることができるのが,FunctionalDependencies なのであった.恐らく多くの人が初めて目にするのは,mtl

    TypeFamilyDependencies の実用的な例を考える - ryota-ka's blog
    xef
    xef 2018/03/11
  • vty + StateT で画面のスクロールを実装する - ryota-ka's blog

    この記事は CAMPHOR- Advent Calendar 2015 4日目の記事です. こんにちは,@ryota-ka です.今年もアドベントカレンダーの記事がやって参りました. 今回の記事では,ncurses を使ってターミナル上でフルスクリーンアプリケーションを作成し,ユーザーのキー入力を受け取って画面のスクロール機能を実装します.スクロールのオフセットは State モナドで管理することにしましょう. TL; DR Haskell で ncurses を触る際には vty が便利 複数のモナドを同時に扱いたい時にはモナド変換子を使おう ソース GitHub に上がってます ncurses と vty について ターミナル上でフルスクリーンで動作するアプリケーションはよくあります.例を挙げると,tig, sl, twterm, chikubeam などなど.こういった挙動を実現する

    vty + StateT で画面のスクロールを実装する - ryota-ka's blog
    xef
    xef 2015/12/04
  • 1