タグ

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

  • 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の新機能まとめ - モナドとわたしとコモナド
    theatrical
    theatrical 2016/03/01
    割と嬉しい感じだ
  • デシリアライザとスキーマ - モナドとわたしとコモナド

    盛大に遅れました… qiita.com 最近思いついたネタで実用性の高そうなものを紹介。 binaryやcerealのようなライブラリはデータを密にシリアライズするが、その際にフィールド名や型などの情報は失われてしまう。かといってそれらを一つ一つすべて含めるとひどく効率の悪いフォーマットになってしまう。そこで、スキーマを分離できるような仕組みを作れないかと考えて作ったのがこのクラスだ。 {-# LANGUAGE TypeFamilies, ScopedTypeVariables, FlexibleContexts, UndecidableInstances #-} import Data.Binary class HasSchema a where type Schema a :: * toSerializer :: a -> Put toDeserializer :: Schema a

    デシリアライザとスキーマ - モナドとわたしとコモナド
  • ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド

    注意(2018/04) かなり古い記事なので、extensibleの最新のバージョンとはまったく互換性がない __ 動機 GHCに、OverloadedRecordFields(ORF)という拡張の導入が提案されている。 (Records/OverloadedRecordFields/Design – GHCより) Haskellのレコードの深刻な欠点は、フィールドをオーバーロードできないことだ。例えば、 data Person = Person { personId :: Int, name :: String } data Address = Address { personId :: Int, address :: String } と定義したとき、personIdはどちらを参照すべきかわからない。よくある対策としてデータ型に接頭辞をつけるという方法があるが、コードやフィールド間の関

    ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド
    theatrical
    theatrical 2015/01/22
    recordの話題何日か前くらいにもredditで話題になってたなぁ。
  • 関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド

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

    関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド
    theatrical
    theatrical 2014/09/22
    後で
  • Lensを使うぜ! - モナドとわたしとコモナド

    パッケージをインストールするぜ!そしてさっそくghciを起動するぜ! $ cabal install lens $ ghci GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude> import Control.Lens Prelude Control.Lens> タプルから値を取り出すぜ! > (1,1,4,5,1,4) ^. _3 4 リストの要素も取り出せるぜ!勿論範囲外の値は取れないけどな! > [1,1,4,5,1,4]

    Lensを使うぜ! - モナドとわたしとコモナド
    theatrical
    theatrical 2014/02/02
    便利そう
  • Freeモナドを超えた!?operationalモナドを使ってみよう - モナドとわたしとコモナド

    限定版IOみたいなモナドを簡単に作れたら、コードが分離できるしテストもしやすくなるのになあ… 数か月前なら、 それ、Freeモナド*1でできるよ! と返されるだろう。だが今は違う。Freeモナドよりも簡単にモナドを作れるモナド、Operationalモナドがあるのだ。 Freeモナドについて復習しよう。FreeモナドはFunctorを基にMonadを作れる構造であり、Functorで自分自身を包むことによってモナドの力を得ている*2。FunctorそのものはDeriveFunctor拡張を使って簡単に作れる。 {-# LANGUAGE DeriveFunctor #-} import Control.Monad.Free data CharIO a = PutCh Char a | GetCh (Char -> a) | LiftIO (IO a) deriving Functor put

    Freeモナドを超えた!?operationalモナドを使ってみよう - モナドとわたしとコモナド
  • 1