『関数プログラミング入門』3.3 畳み込み関数 の続きをやろう。 数の定義から出発して、 +, ×, ↑ の計算を定義してきた。 ここで、再帰定義のお勉強の王道である、階乗とフィボナッチ数を求めてみよう。 とりあえず、何も考えず、本を写経してみた。 data Nat = Zero | Succ Nat deriving (Eq,Ord,Show) foldn :: (a -> a) -> a -> Nat -> a foldn h c Zero = c foldn h c (Succ n) = h (foldn h c n) m + n = foldn Succ m n m × n = foldn (+ m) Zero n m ↑ n = foldn (× m) (Succ Zero) n fact :: Nat -> Nat fact = snd . foldn f (Zero, Suc
I'd like to understand Applicative in terms of category theory. The documentation for Applicative says that it's a strong lax monoidal functor. First, Wikipedia page about monoidal functors says that a monoidal functor is either lax or strong. So it seems to me that either one of the sources is wrong, or they use the terms differently. Can anybody explain that? Second, what are the monoidal catego
Google グループでは、オンライン フォーラムやメール ベースのグループを作成したり、こうしたフォーラムやグループに参加したりすることで、大勢のユーザーと情報の共有やディスカッションを行うことができます。
Google グループでは、オンライン フォーラムやメール ベースのグループを作成したり、こうしたフォーラムやグループに参加したりすることで、大勢のユーザーと情報の共有やディスカッションを行うことができます。
型レベルでのプログラミングをする際、よく「値」が存在しない型 ( i.e. EmptyDataDecls な型。 DataKinds で Promoted されたデータコンストラクタとか。 ) を「型レベルでの値」として扱うけれど、これはつまり実体を持っていないということだから、まるで雲を掴むような話になってしまいわけがわからなくなる。 これに対して、 GHC 7.6.1 では、「型レベルの値」を「ランタイムレベルの値」にマップして、便利に使えるように、 Singleton types という型クラス群が用意されたようだ。 そこで、前回の 型レベルで FizzBuzz で定義した Nat, Result 型を題材に、実際にそれぞれのインスタンスを宣言して、「型レベルの値」を「ランタイムレベルの値」にマップしてみた。 参考にしたサイト https://github.com/ghc/packa
Type equality predicates: from OverlappingInstances to overcoming them Type equality predicates decide if two types are equal and return the result of the comparison as a type-level boolean. A type equality predicate ought to be total for ground types, that is, types with no free type variables. A more general type matching predicate compares the shape of two types, their top-level type constructo
HaskellコンパイラGHCの作者の一人であり並列RTSを書いた人であるSimon Marlowが、Haskellでの並列・並行プログラミングの今を切り取った本を出した。 Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming 作者: Simon Marlow出版社/メーカー: O'Reilly Media発売日: 2013/07/12メディア: Kindle版この商品を含むブログを見る The Free Lunch Is Overから8年、Haskellでの並列・並行プログラミングの今がどうなっているのかを俯瞰しつつ、実際の問題を解決するときに陥りがちな罠や、高い性能を出すためのtipsなどが読みやすくまとまった一冊になっていて、Hask
この記事は Haskell Advent Calendar 2013 および Theorem Prover Advent Calendar 2013 二十日目の記事であり、更にTCUGの新刊「Coqによる定理証明」の販促記事でもある。 型システム再考 Haskell は静的型付き言語だ。それだけでなく、強力な型推論や表現力の高い型システムを備えている。 型とは何だろうか。 こうした質問に対してよくある答えは、「値の種類を区別するためのタグ」になるだろうか。Int型は整数だし、Bool型は真偽値で、[Int]型は整数値リストを表す型だ。なるほど、値の種類を区別するものに見える。 しかし、この答えは間違ってはいないが、もっと相応しい云い方が出来るだろう。それは、「型は不変条件である」というものだ1。この言明は別に私固有の見方というわけではなく、ある程度の型レベルプログラミングをやった事のある人
以前,Clojureで音楽組織プログラミングについて書いた。 それを今度はHaskellで書こうと思う。 Haskellによる音楽構造プログラミングについて。 プログラマが音楽することについて 音楽家でない人が新しい音楽を作ることだってある 現代音楽では有名なヤニス クセナキスという人がいました。彼は音楽家を目指す以前は、建築家であり数学に堪能な人でした。そして、音楽家を目指し、そして偉大な現代音楽家オリヴィエ・メシアンに、師事し、尋ねました。 音楽家になるために、私は音楽の理論を学びたい。何を学ぶべきでしょうか? そして、メシアンは言いました。 君は数学を知っている。なぜそれを作曲に応用しないのか。伝統的な修練は、あってもなくても同じではないか そして、クセナキスは気づきました。そして、音楽の構築に彼の持つ数学的な知識、建築の感覚を音楽に応用して、新しい音楽を作曲していきます。大変すごい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く