Movatterモバイル変換


[0]ホーム

URL:


Takashi Kawachi, profile picture
Uploaded byTakashi Kawachi
PDF, PPTX672 views

Haskell超初心者勉強会17

Embed presentation

Download as PDF, PPTX
Haskell超初心者勉強会17第14章 前半2013/8/22Thursday, August 22, 13
14章はモナドの紹介•文脈の活用方法がわかるのか?•紹介するモナドは mtl パッケージ内に•ghc-pkg list ¦ grep mtl でインストールされていることを確認Thursday, August 22, 13
Writerモナド•もう一つの値がくっついた値•くっつく値はログのように振る舞う•すべてのログが単一のログ値にまとまることを保証できるThursday, August 22, 13
ナイーブに実装してみるisBigGang :: Int -> BoolisBigGang x = x > 9isBigGang :: Int -> (Bool, String)isBigGang x =(x > 9, "Compared gang size to 9")Thursday, August 22, 13
すでに文字列(文脈)のくっついた値を処理するには?applyLog :: (a, String) ->(a -> (b, String)) -> (b, String)applyLog (x, log) f =let (y, newLog) = f x in(y, log ++ newLog)>>= と似た感じ(>>=) :: m a -> (a -> m b) -> m bThursday, August 22, 13
applyLogを使ってみる•ログが連結される•関数は文脈なしの値を引数にとる> (3, "abc") `applyLog` isBigGang(False, "abcCompared gang size to 9")> ("Tobin", "Got outlaw name.") `applyLog`(x -> (length x, "Applied length.")(5, "Got out lawname. Applied length.")Thursday, August 22, 13
モノイドが助けに来たよ付加情報はStringにかぎらずリスト一般にできるよね。++使ってるし。applyLog :: (a,[c]) -> (a -> (b,[c]))-> (b,[c])付加情報としてByteStringも使いたい。でも今の型だとリストしか使えない…リストとByteString、両方 Monoidmappend はくっつける操作Thursday, August 22, 13
モノイドを使って書き換えてみるapplyLog :: (Monoid m) =>(a,m)->(a->(b,m))->(b,m)applyLog (x, log) f =let (y, newLog) = f x in(y, log `mappend` newLog)「値+ログ」から「値+モノイド値」に拡張されたThursday, August 22, 13
食べ物を与えると飲み物+値段が返る関数import Data.Monoidtype Food = Stringtype Price = Sum IntaddDrink :: Food -> (Food, Price)addDrink "beans" = ("milk", Sum 25)addDrink "jerky" = ("whiskey", Sum 99)addDrink _ = ("beer", Sum 30)モノイドは値に計算が定義されているのがいいねThursday, August 22, 13
「食べ物+値段」にaddDrinkを適用すると..> ("beans", Sum 10) `applyLog` addDrink("milk,Sum {getSum=35})> ("dogmeat", Sum 5) `applyLog` addDrink("beer",Sum {getSum=35})> ("dogmeat", Sum 5) `applyLog` addDrink`applyLog` addDrink("beer",Sum {getSum=65})おまけの値はログに限らないことがはっきりしたThursday, August 22, 13
Control.Monad.Writer•Writer w a 型•Writer w a 型のMonadインスタンス•Writer w a 型を扱う便利関数Thursday, August 22, 13
Writer w a の定義newtype Writer w a =Writer{runWriter::(a,w)}タプルをラップした型a が主な値の型wがおまけのモノイド値の型Writer値コンストラクタは非公開代わりにwriter関数が公開Thursday, August 22, 13
Writer w a のMonadインスタンスinstance (Monoid w) => Monad (Writer w) wherereturn x = Writer (x, mempty)(Writer (x, v)) >>= f =let (Writer (y, v')) = f x inWriter (y, v `mappend` v')>>= と自分で定義した applyLog はタプルがラップされている以外は同じThursday, August 22, 13
memptyはモノイド値によって変わる(多相的)> runWriter (return 3 :: Writer String Int)(3,"")> runWriter (return 3 :: Writer (Sum Int) Int)(3,Sum {getSum=0})> runWriter (return 3 :: Writer (Product Int) Int)(3,Product {getProduct=1})Thursday, August 22, 13
次回はThursday, August 22, 13

Recommended

PDF
8F Emacs seminar 1st
PDF
新宿鮫もくもく勉強会第10回目
ODP
20130608 git-2
PDF
ジャパネットQB GPars
PDF
アニメーションの実装つらい話
PPTX
The Programming Language Scheme
PPTX
C++のビルド高速化について
PPTX
Rでのtry関数によるエラー処理
PDF
Haskell勉強会 14.1〜14.3 の説明資料
PDF
すごいH 第12章モノイド
PDF
すごいHaskell楽しく学ぼう-第12章モノイド-
PDF
すごいHaskell楽しく学ぼう 第6章
KEY
モナドがいっぱい!
PDF
Haskell超初心者勉強会14
PDF
Freer Monads, More Extensible Effects
PDF
リストモナドを作ってみた
PDF
すごいHaskell読書会 第六章 発表資料
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
KEY
Haskell Day2012 - 参照透過性とは何だったのか
PDF
圏論のモナドとHaskellのモナド
PDF
Tpp2012 mwpl on_coq
ODP
これから Haskell を書くにあたって
PDF
Scalaプログラミング・マニアックス
PDF
Haskell Lecture 2
PDF
モナドハンズオン前座
KEY
Sml#探検隊
PDF
Adding simpl GVN path into GHC
PDF
Haskell night
PDF
例外のlogを快適に
PDF
MacroPyがすごい

More Related Content

PDF
8F Emacs seminar 1st
PDF
新宿鮫もくもく勉強会第10回目
ODP
20130608 git-2
PDF
ジャパネットQB GPars
PDF
アニメーションの実装つらい話
PPTX
The Programming Language Scheme
PPTX
C++のビルド高速化について
PPTX
Rでのtry関数によるエラー処理
8F Emacs seminar 1st
新宿鮫もくもく勉強会第10回目
20130608 git-2
ジャパネットQB GPars
アニメーションの実装つらい話
The Programming Language Scheme
C++のビルド高速化について
Rでのtry関数によるエラー処理

Similar to Haskell超初心者勉強会17

PDF
Haskell勉強会 14.1〜14.3 の説明資料
PDF
すごいH 第12章モノイド
PDF
すごいHaskell楽しく学ぼう-第12章モノイド-
PDF
すごいHaskell楽しく学ぼう 第6章
KEY
モナドがいっぱい!
PDF
Haskell超初心者勉強会14
PDF
Freer Monads, More Extensible Effects
PDF
リストモナドを作ってみた
PDF
すごいHaskell読書会 第六章 発表資料
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
KEY
Haskell Day2012 - 参照透過性とは何だったのか
PDF
圏論のモナドとHaskellのモナド
PDF
Tpp2012 mwpl on_coq
ODP
これから Haskell を書くにあたって
PDF
Scalaプログラミング・マニアックス
PDF
Haskell Lecture 2
PDF
モナドハンズオン前座
KEY
Sml#探検隊
PDF
Adding simpl GVN path into GHC
PDF
Haskell night
Haskell勉強会 14.1〜14.3 の説明資料
すごいH 第12章モノイド
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう 第6章
モナドがいっぱい!
Haskell超初心者勉強会14
Freer Monads, More Extensible Effects
リストモナドを作ってみた
すごいHaskell読書会 第六章 発表資料
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Haskell Day2012 - 参照透過性とは何だったのか
圏論のモナドとHaskellのモナド
Tpp2012 mwpl on_coq
これから Haskell を書くにあたって
Scalaプログラミング・マニアックス
Haskell Lecture 2
モナドハンズオン前座
Sml#探検隊
Adding simpl GVN path into GHC
Haskell night

More from Takashi Kawachi

PDF
例外のlogを快適に
PDF
MacroPyがすごい
PDF
Silhouette intro
PDF
最小 Hello World! チャレンジ
PDF
Sbt doctest
PDF
Elastic beanstalk と Docker と Play
PDF
やさしいIteratee入門
PDF
Sbt lock1
PDF
Haskell超初心者勉強会20
PDF
Haskell超初心者勉強会11
PDF
Scalaでの例外処理
例外のlogを快適に
MacroPyがすごい
Silhouette intro
最小 Hello World! チャレンジ
Sbt doctest
Elastic beanstalk と Docker と Play
やさしいIteratee入門
Sbt lock1
Haskell超初心者勉強会20
Haskell超初心者勉強会11
Scalaでの例外処理

Haskell超初心者勉強会17


[8]ページ先頭

©2009-2025 Movatter.jp