この記事は 一休.com Advent Calendar 2024 の15日目の記事です。 予定より早く書き上げてしまったので、フライングですが公開してしまいます。TypeScript の Discriminated Union (判別可能な Union 型) を使うと、いわゆる「代数的データ型」のユースケースを模倣することができます。一休のような予約システム開発においては「ありえない状態を表現しない」方針で型を宣言するためによく利用されています。 「あり得ない状態を表現しない」という型宣言の方針については以下の URL が参考になります。 Designing with types: Making illegal states unrepresentable | F# for fun and profit このユースケースで Discriminated Union を使う場合、それは文字
はじめに本記事は、今回筆者が作成したHaskellのエフェクトシステムライブラリの背景を説明するものです。Haskellに触れたことがない読者のために、理解に必要な事柄や文法等は記事中で簡単に説明します。Haskellやライブラリ自体に興味がなくとも、エフェクトシステムの紹介だけでも今後の参考にしていただければ幸いです。 エフェクトシステム エフェクトシステムというプログラミングパラダイムが以前より研究されていました。 これは、プログラムのコード内で起こりうる副作用を分類、タグ付けし、実行時より前に分かるようにするというものです。ここでは、副作用を分類して名前を付けて型として表したものをエフェクト型と呼び、あるコード片が発生させうるすべてのエフェクト型の集合をエフェクト集合と呼ぶことにします。 例えば 1+1 このプログラムのエフェクト集合は空集合{}です。なぜなら、一切の副作用(入出力

「テセウス、何か手を打たなければならない。」ホメロス…Ancient Geeks株式会社の営業部部長は言った。テセウスはミノタウロスアクションフィギュア™を後ろの棚に入れてうなずいた。「今の子供たちはもはや古代神話に興味を持っていない、彼らはスパイダーマンやスポーンのような現代ヒーローが好きなんだ。」ヒーロー。テセウスは、迷宮からクレタ島に戻った英雄[1]だったから、どのくらいのものかをよく知っていた。しかし「現代ヒーロー」たちは現実的に現れるようなことはしなかった。何が彼らの勝因だったのか?とにかく、未払い金の問題が解決できなかった場合、株主たちはステュクス河を渡ってきてAncient Geeks株式会社を整理するだろう。 「閃いたぞ!テセウス、良い案がある!君のミノタウロスとの戦いの物語をコンピューターゲームにするんだ!どうだい?」ホメロスは正しかった。何冊かの本、叙事詩の歌(ヒットチ
関数型プログラミング言語については、以前にHaskellの本を読んでみたりして、興味はあったのだが正直あまり理解できてなかった。 『なっとく!関数型プログラミング』はScalaのコードで関数型プログラミングを説明している本だ。最近邦訳が発売されて話題になっていたので買って読んでみた。 www.seshop.com この本で入れ子のflatMap の説明から、Scalaの for 内包表記 を説明しているところを読んで、Haskell の do もこれかということに気がついた。 リストの場合 // 入れ子のflatMap val result = List(1, 2).flatMap { x => List(10, 20).flatMap { y => List(100, 200).map { z => x + y + z } } } // for内包表記 val result2 = for
LensでHaskellを もっと格好良く!2015/5/30 Lens&Prism勉強会 by ちゅーん(@its_out_of_tune)
Lens&Prism勉強会 私的まとめ by Yuji Yamamoto on June 9, 2015 もう開催から1週間以上経ってしまいましたが、Lens&Prism勉強会に行ってきたのでそのまとめ記事です。 当日しこしことっていたメモと記憶を頼りに、発表内容や個人的な気付きなどを書きます。 @gakuzzzzさんの「Lensの説明」 connpassには別のスライドが貼ってありますが、実際の中身はBeyondScala Lensというスライドの日本語での解説でした。 要約するとこんな感じの表に収まるのですかね。 スライドではScalaでの呼び名で説明されてましたが、ここでは私向けにHaskellに訳しています。 -- 全てのsをaに変換でき、かつ全てのaをsに変換できる関数のペア Iso' s a: f :: s -> a, g :: a -> s -- 全てのsからaに変換できる
The Haskellprogramming language community. Daily news and info about all things Haskell related: practical stuff, theory, types, libraries, jobs, patches, releases, events and conferences and more...

Haskell にあらかじめ備えられている型クラスは、それを知らなくても Haskell のプログラムを書き下すことは可能ですが、知っているとコンパクトに、再利用可能で、曖昧さのないようにプログラムを書き下すことができるようになります。実用的なライブラリの中核となるデータ型はほとんどの場合で Monad を含む複数の型クラスを実装しています。そのようなライブラリを使いこなすためには、型クラスの特性を知っておく必要があり、また自身で作成したデータ型に型クラスを実装するに際してもまた、型クラスの特性を知っておく必要があるわけです。本記事では、Haskell のよく使う以下型クラスの覚書です。 Functor Applicative Monad Semigroup Monoid Alternative MonadPlus Show、Eq、Ord などももちろん Haskell の主要な型クラス

某所で オブジェクト指向 (OOP) における Visitorパターン について話されていたので、自分の関数型プログラミングのメモ用に整理してみたいと思います。 (Twitterで書くには少し長すぎたので、こちらに整理) 2021/01/10 EDIT: Church (Boehm–Berarducci) エンコーディングとVistorパターンについての具体的な事例は、こちらの記事が分かりやすいので、ご参照ください。 Haskell for all: The visitor pattern is essentially the same thing as Church encoding 概要 OOP における Visitor パターンは、関数型プログラミング的に言えば、(パターンマッチする)F代数によるμ再帰を Church encoding したもの。 つまり、 を関数適用して、結果 a

fix関数についての解説記事が少なかったので、頑張ってかき集めた情報をまとめておこうと思います。 内容としては、 fix関数 <- 今ココ MonadFixと再帰的do記法 ArrowLoopと再帰的arrow記法 を複数の記事に分けて紹介します。 fix関数なら大体知っているよっていう人は、説明を飛ばして、後ろの練習問題から始めても楽しいと思います。 fix関数の仕組みはいいから、使い方だけ教えて~~っていう人は、fix関数の活用法から始めると幸せかもしれません。 この記事に載せているソースコードは、モジュールのimport文を省いています。なので、実際に手元の環境で動かしてみるときは、次のimport文をソースコードの冒頭に追加して実行してください。

12月20 Dynamorphism 〜 Haskellでも動的計画法がしたい! 〜 カテゴリ:プログラミング言語AI研 この記事は rogy Advent Calenderの20日目の記事です また、この記事の単体のHTMLファイルがあります。 単体のHTMLファイルの方がスタイルが良い感じになっているので、出来ればそちらを読んでください。 1. はじめに1.1. まえがき この記事では、関数型プログラミングにおいて動的計画法(DynamicProgramming)を行う手法の一つである dynamorphism について解説します。 しかし、dynamorphism という概念はそれ単体で説明できるものではなく、F-代数 や catamorphism, anamorphism, hylomorphism, histmorphism などの各種概念を用いないと説明できないものです。そこ

Prelude には,const :: a -> b -> a という関数が定義されています.a -> b -> a という型は a -> (b -> a) のことなので,この関数を引数に適用すると,b -> a という型の関数になります.できあがった関数はどのような値 v :: b に適用しても,この関数を作るときに適用した引数を返します. ghci> :type const const :: a -> b -> a ghci> let k1 = const 1 ghci> k1 "Hoge" 1 ghci> k1 False 1 ghci> k1 undefined 1 ghci> let kHuga = const "Huga" ghci> kHuga "Hoge" "Huga" ghci> kHuga 2 "Huga" ghci> kHuga undefined "Huga"さて「
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く