[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
上
下
前
次
1-
新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
200
: 2011/10/21(金)11:19
AA×
>>192
>>186
[240|
320
|
480
|
600
|
100%
|
JPG
|
べ
|
レス栞
|
レス消
]
200: [sage] 2011/10/21(金) 11:19:02.96 >>192のアイデアを水平合成とみて>>186のに適用するとこんな感じ? type Magma a = a -> a -> a class MonadZero m where mzero :: m a class MonadZero m => MonadOr m where mor :: Magma (m a) class MonadZero m => MonadPlus m where mplus :: Magma (m a) instance MonadZero [] where mzero = [] instance MonadOr [] where mor xs = if null xs then id else const xs instance MonadPlus [] where mplus = (++) fizz = cycle $ replicate 2 mzero `mplus` return "Fizz" buzz = cycle $ replicate 4 mzero `mplus` return "Buzz" fizzbuzz = zipWith mplus fizz buzz main = print $ zipWith mor fizzbuzz $ map show [1..100] listモナドの和を論理和(つまりMaybeモナドの和)、数値和の二通りに見ることで数値和で作ったfizzbuzzのパターンと数字のパターンを論理和で合成する・・・と Listを信号としてみれば、もろor回路による信号の合成だよな。始まる場所が変わることに対してはdrop等で開始位置をずらしてつまり信号のdelay回路か SignalArrowを使った抽象化でもいけそうに見えるな それはさておき垂直合成、つまりモナド変換子を使うのはどうなるんだろうか FizzT (FuzzT Identity Int) [String]みたいな型になればそれっぽいんだけど http://echo.5ch.net/test/read.cgi/tech/1317958045/200
のアイデアを水平合成とみてのに適用するとこんな感じ? モナドの和を論理和つまりモナドの和数値和の二通りに見ることで数値和で作ったのパターンと数字のパターンを論理和で合成すると を信号としてみればもろ回路による信号の合成だよな始まる場所が変わることに対しては等で開始位置をずらしてつまり信号の回路か を使った抽象化でもいけそうに見えるな それはさておき垂直合成つまりモナド変換子を使うのはどうなるんだろうか みたいな型になればそれっぽいんだけど
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 778 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
ぬこの手
ぬこTOP
0.034s