タグ

ブックマーク / fumieval.hatenablog.com (5)

  • GHC 8.0.1/base-4.9.0.0の新機能まとめ - モナドとわたしとコモナド

    GHC 8.0.1は、最上位の桁が変わるだけあって、かなり新しい機能が追加されている。 base-4.9.0.0 めっちゃインスタンスが増えた ghc/changelog.md at ghc-8.0 · ghc/ghc · GitHubを参照。あるべきインスタンスが存在することにより、孤児インスタンスを定義する必要がなくなるため、ぐっとストレスが減る。Monoid a => Monad ((,) a)、Traversable ZipListなど、いくつかは私がやった。 Semigroup ついにData.Semigroupが追加された。将来的にはこれはモノイドのスーパークラスになる。この変更によって、よりリーズナブルな定義ができるということも少なくないはずだ。 ベーシックな型が充実 Compose, Product, Sum, NonEmptyなど、決して利用頻度が高くないとはいえ基礎的か

    GHC 8.0.1/base-4.9.0.0の新機能まとめ - モナドとわたしとコモナド
    todays_mitsui
    todays_mitsui 2016/02/29
    なるほど。
  • lensパッケージのオプティクス(弱い順) - モナドとわたしとコモナド

    lensではオプティクスと呼ばれる様々な構造が定義されている。これらの関係を把握していれば、ドキュメントから欲しいものを見つけるのが楽になる。この記事では弱い順にオプティックの数々を紹介していく。 Fold type Fold s a = forall f. (Applicative f, Contravariant f) => (a -> f a) -> s -> f s Contravariantがついているのでわかりにくいが、これは質的に以下の型と等価だ。mappendは*>、memptyはfmap absurd $ contramap absurd $ pure ()に相当する。 type Fold s a = forall r. (Monoid r) => (a -> r) -> s -> r で、これは何かと言えば、foldMap :: Foldable f => (a ->

    lensパッケージのオプティクス(弱い順) - モナドとわたしとコモナド
  • 関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド

    Googleで適当に検索すると とズラリと出てくる。 オブジェクト指向 v.s. 関数型プログラミング 関数型とオブジェクト指向という一見相反するプログラミングパラダイムの併用について理解した プログラマが知るべき97のこと/関数型プログラミングを学ぶことの重要性 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 関数型プログラミングとオブジェクト指向の抜き差しならない関係について整理して考える とそれなりに参考になりそうな情報はあるものの、無駄に複雑化されたオブジェクト指向をストローマンにするような記事ばかり(それだけ今までのオブジェクト指向にみんなうんざりさせられているのだろう)で、そろそろきちんと自分自身「関数型プログラミングとオブジェクト指向の切り離され方」についてはっきりさせておきたい、と考え、概念整理した結論を書きます。 まず端的な結論 結論を

    関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド
  • 8つの質問で、Lazy K業界の現状を知る - モナドとわたしとコモナド

    Lazy系の会社の隆盛があって、仕様が定められたのが8年ぐらい前だろうか。 コンビネータ産業の人材動向が、今どうなってるかって? 大方の予想より凄惨ですよ。 それが分かる方法がある。Lazy K技術者に技術力を問う8つの質問によってだ。 Lazy K業界のエンジニアの平均レベルを知りたくって、いろんな会社さんのLazy K開発者(経験者)向けに以下のようなつ8の質問をしていない。 その8つの質問というのはこんな問題だ。 Lazy K技術者に技術力を問う8の質問 ラムダ抽象ではなくコンビネータで表現するメリットを一言で表してください。(筆記回答) 入出力の終端を表現する方法は何ですか?(筆記回答) チャーチエンコーディングとスコットエンコーディングの違いを端的に説明してください。(筆記回答) 任意の関数に対して不動点を求めるコードはどれですか?(選択回答) S I I (S (S (K S)

    8つの質問で、Lazy K業界の現状を知る - モナドとわたしとコモナド
  • Freeモナド実用の旅(2): Gotoモナド - モナドとわたしとコモナド

    かなりシンプルに実装できた。よい子は絶対にマネしないでね! import qualified Data.IntMap as M import Control.Monad.Trans.Free import Control.Monad.Trans newtype Label = LabelId Int deriving (Eq, Ord) data Labeling a = Label (Label -> a) | Goto Label -- deriving Functorがあれば不要 instance Functor Labeling where fmap f (Label g) = Label (f . g) fmap f (Goto l) = Goto l type GotoT = FreeT Labeling label :: Monad m => GotoT m Label la

    Freeモナド実用の旅(2): Gotoモナド - モナドとわたしとコモナド
    todays_mitsui
    todays_mitsui 2013/02/21
    あ、これ俺もやりたい。
  • 1