タグ

Haskellとfunctorに関するnsyeeのブックマーク (7)

  • Functor-Applicative-Monad Proposal - HaskellWiki

    Haskell calls a couple of historical accidents its own. While some of them, such as the "number classes" hierarchy, can be justified by pragmatism or lack of a strictly better suggestion, there is one thing that stood out as, well, not that: Applicative not being a superclass of Monad. The topic has been discussed multiple times in the past (cf. link section at the very end). This article describe

  • SetはFunctorである - think and error

    Haskell Advent Calendar 2013 9日目です。 概要 SetはFunctor。 Categorical Programming for Data Types with Restricted Parametricity rmonad: Restricted monad library なぜSetはFunctorになっていないのか Setを要素が重複しないデータ構造とします。Setはその性質のため、要素には比較出来ることが要求されます。Haskellで言うとEq制約です。まあ来重複しないことだけを要求するならEq制約だけでいいはずですが、SetがOrd制約を要求しているのは効率の良い実装にするためでしょう。containersパッケージのData.Setはバランス二分木で実装されています。 来SetはFunctorにすることが出来るはずです。しかし現状(GHC7.6

    SetはFunctorである - think and error
  • ファンクタであそぼう - 非現実的非日常的非常識的、非日記。

    Haskell, ITこの記事はHaskell Advent Calendar 2013の3日目の記事です。 目次どうして?ファンクタを拡張しようおさらい引数をふたつ取ろう逆転の発想共変・反変・自由変・固定変データ型の整理正の位置と負の位置自由変と固定変ファンクタ類を自動生成しようまとめおまけThornについてCPLであそぼう どうして?ファンクタはHaskellに欠かせないものですが、ファンクタを一般化して見るという見方は意外に広まっていないように感じます。分かってしまえば単純な話だけにもったいないと思ってこの記事を書くことにしました。 また、僕は最近Thornというライブラリを作りました。これは、さまざまなデータ型から関手や畳み込み・展開をTemplate Haskellを使って自動生成するライブラリです。このライブラリを作るなかで気づいたことも合わせて書いていこうと思います。 ファン

    ファンクタであそぼう - 非現実的非日常的非常識的、非日記。
  • Functors, Applicatives, And Monads In Pictures - adit.io

    Written April 17, 2013 updated: May 20, 2013 Here's a simple value: And we know how to apply a function to this value: Simple enough. Lets extend this by saying that any value can be in a context. For now you can think of a context as a box that you can put a value in: Now when you apply a function to this value, you'll get different results depending on the context. This is the idea that Functors

  • QAで学ぶMonad - あどけない話

    この記事は、Monad でつまづいた Haskeller のための Monad 再入門です。 Monadとは何ですか? Monad とは、単なる型クラスの一つです。難しいという風評もありますが、それ以上でもそれ以下でもありません。 この型クラスのメソッドは、return と >>= です。 class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a つまり、以下を満たす型の集合が Monad です。 m a で表現できるように一つの型変数を格納するコンテナ型 >>= と return を実装 return は新しいコンテナを作り、>>= は二つのコンテナを合成します。 Monad のインスタンスは失敗系と状態系に大別できます。以下に代表的なインスタンスを示します。 失敗系: Maybe、[] (リスト)

    QAで学ぶMonad - あどけない話
  • Route 477(2009-10-24)

    ■ [ruby] gem-depcleanについて、とりとめもないこと RubyGemsをgentooのPortage風に管理するプラグイン、gem-depcleanをid:ursmさんが公開されています。 gem-depclean - ursmの日記 やりたいことは 依存元がなくなったgemの削除 必要なgem・versionだけ残すgem clean の2つですよね。 前者について これはRubyGemsの機能として含まれるべきでしょう。uninstallの時に、「それが必要としているが、他から必要とされていないgem」を 同時に消すオプションがあれば良いんですよね。 後者について 「gem clean railsしたら、昔書いたアプリで使ってたバージョンが消えて困った」とかの経験は僕もあります。 「このバージョンはまだ使ってます」フラグを立てることが出来たら良いのかも。(aptitu

    Route 477(2009-10-24)
  • Haskell の fmap

    A Gentle Introduction to Haskell: Classes によると、 fmap 関数は以前につかった map 関数を一般化したものです。 map と言えば、リストの各要素に対して関数を適用するための関数。例えば、リストの要素を 2 倍したいときは、 print $ map (* 2) $ [1,2,3,4,5] -- [2,4,6,8,10] map がリストのためにあるのに対し、fmap は自分で作成した代数的データ型に対して、map のように各要素に関数を適用するためにあるようだ。今回、以前に定義したシンプルな Iremono 型 を少し変更し、これに適用できるようにしてみる。 Iremono a 型の定義を以下のように変更。 data Iremono a = Iremono [a] deriving (Show,Eq) 前回は Iremono 型のフィールド

  • 1