@xuwei_k 需要全然あります!よければぜひとも!
— Seizan Shimazaki (@seizans) September 21, 2012
すいません、宣伝
Scala Conference in Japan というのをやります!
Option
を使うことにより減りますが null
からは完全に逃れられない・・・
Monad
とか Applicative
とかがない・・・?
今日とりあえず一番言いたいこと
↓
Scalaでの型クラスについて!_人人人人人人_ > implicit <  ̄^Y^Y^Y^Y^ ̄
implicit
という謎の予約語がある
implicit conversion
と implicit parameter
という2種類がある
implicit conversion
は型クラスには、ほとんど関係ないので忘れてください
trait Functor[F[_]]{
def fmap[A, B](r: F[A], f: A => B): F[B]
}
class Functor f where
fmap :: (a -> b) -> f a -> f b
implicit def OptionFunctor: Functor[Option] =
new Functor[Option] {
def fmap[A, B](r: Option[A], f: A => B) = r map f
}
instance Functor Maybe where
fmap _ Nothing = Nothing
fmap f (Just a) = Just (f a)
とりあえず、Scalaで以下のものがでてきたらほとんどの場合型クラスのインスタンス定義だと思えばいい
implicit val
implicit object
implicit def
implicit parameterによる型クラスは 「偶然エミュレートできた」のではなく、 最初から型クラスをエミュレートすることを意図して入れた! という事実
詳しく知りたい人は、Scalaの作者自らが書いた、この論文とか読んでください
Scalaには、for式というものがありますが、ループのための構文ではなく Monadのための構文 です!
ところで、さっきのFunctorの定義は、Scala標準ライブラリにはありません
_人人人人人_ > Scalaz <  ̄^Y^Y^Y^Y ̄
でも、Scalaをdisってたよ(>_<)
@zedshaw codepad.org/6z1uQg3C shows why I'd rather just write it in Haskell. The parameters are only there because scala has crap inference.
— Edward Kmett (@kmett) August 28, 2012
implicit def KleisliCategory[M[_]: Monad]: Category[({type λ[α, β]=Kleisli[M, α, β]})#λ]
= new Category[({type λ[α, β]=Kleisli[M, α, β]})#λ] {
def id[A] = ☆(_ η)
def compose[X, Y, Z](f: Kleisli[M, Y, Z], g: Kleisli[M, X, Y]) = f <=< g
}
instance Monad m => Category (Kleisli m) where
id = Kleisli return
Kleisli f . Kleisli g = Kleisli (f <=< g)
Equal(HaskellのEq)、Show、Order(HaskellのOrd)、Functor、Applicative、Monad、MonadPlus、Monoid、Arrow、Zipper、State、Writer、Reader、Traverse、IO、Kleisli、Free、Comonad、Bifunctor、Category、Cojoin、CoKleisli、Each、Endo、Cofree、Group、Length、Lens、Partial Lens、Semigroup、Zip、Zipper、Zap
ちょっと話逸れます
一週間くらい前
Freeモナドやばい、悟りを開いた気分だわ。
— ねこはる (@halcat0x15a) October 4, 2012
Stackless Scala With Free Monads
Freeモナドくわしく
— Hideyuki Tanaka (@tanakh) October 5, 2012
Free Monadが流行る
Freeモナドで悟りを開きました
— Hideyuki Tanaka (@tanakh) October 6, 2012
RTされた数だけFreeモナドの解説記事書く
— Hideyuki Tanaka (@tanakh) October 6, 2012
200RT以上!?
1点だけ利点があるらしい
おわり。ありがとうございました