Choosing an array type in Haskell is a difficult task. For one-dimensional random access data structure the vector library seems to be the optimal choice most of the time. Things are more complicated if you happen to need two- or multi-dimensional arrays (matrices), access their blocks and slices as first-class structures (like in Python), enjoy destructive updates, use some linear algebra, intero
Haskellで速いコードを書くためのヒントを無秩序に集積したもの。環境としてはGHCを想定する。私は高速化について詳しい訳ではないが、思い付いたことはなんでもかんでも書くように心がけたので、運が良ければ何か役に立つ情報があるかもしれない。 並列処理のパフォーマンスについてはこの文章では触れない。まったく経験がないので。同じ理由で、浮動小数点数を多用した数値計算コードの効率化と、書き換え規則を多用する高水準の最適化も扱わない。 お願い: 文中に間違いや分かりにくい部分があれば指摘いただけると有難いです。また、他に載せた方が良さそうな最適化テクニックや、その他の改善提案があれば教えてください。掲示板またはメールまたはTwitter(@mkotha)までお願いします。 目次 基本的なこと 遅延評価の計算量見積もりの方法と、GHCの内部に依存しないテクニック集。入門書を読んだけれども、Haske
BGM : http://www.youtube.com/watch?v=zvuC7D_IBuY 司会者 「みなさん、こんばんわ。『若いλ彦』の時間がやってまいりました。司会者 「今夜は、若手関数型言語評論家の方々にお集まり頂き、 『2010年代のファンクショナル・シーンを考える』 と題しましてお話をおうかがいいたします。みなさんよろしくお願いいたします。 ABC 「よろしくお願いします。」「ども」 A 「えーと、ほんじゃ、まず僕からいきます。まあー、ぼ、僕の場合はね、コードを向こうから、checkout してんだけど、今の Haskell はさ、なんていうの、こう良いものも有る、だけど悪いものも有るよね。B 「んー、僕の場合はね、ちょっと君とは違うんだけどね、あの、 Haskell プログラマの友達がグラスゴーとかケンブリッジにいるんだけどね、いつもパッチ送ってくれるんだけど、よく見ると
This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.
This is a parked page for haskellers.com and packdeps.haskellers.com. These sites were previously hosted by FP Complete, and are looking for a new home. If anyone is interested in picking these up, feel free to reach out to Michael Snoyman.
この発言 @dekosuke なんか 僕は最近全然 Haskell ゴルフをしていなくて腕が衰えていて悲しいので、 @notogawa さんあたりが解説記事を書いてくれないかと期待しています! [石持浅海先生講演会 11/6(土) URL ] 2010-10-07 20:18:44 via YoruFukurou to @dekosuke を受け,ちょっとまとめてみようかと,とりあえず思い付きをつらつらと書いてみる. 書きつつ思ったが,こんなものでよいのだろうか?これらの前に一段あるような気がする. とりあえず注意書きを書いておくかー. このエントリはHaskell入門ではありません.普通にコーディングする場合,あんまり真似しないほうが良いです. (anarchy) golfの基本 余計な空白は除去(Haskellは関数適用があるので割と空白があるほう) 改行はLF エラーで止めてよい H
Home This site is my collection of Haskell code for learning maths. Why write code to learn maths? If you want to understand maths, it's no good just reading maths books. You've got to do something with it. Writing code is a double whammy: Writing the code forces you to understand the maths When you've written the code, you can play around with it and improve your understanding further Code can b
前回の続き。 wikipedia の F-algebra のページ http://en.wikipedia.org/wiki/F-algebra 参照。 上記ページに F(X) = 1 + X という関手の F-algebra の例で (N,[zero,succ]) が出てくる。Haskell で書くと type N = Int a :: Maybe N -> N a Nothing = 0 a (Just x) = x + 1 本当は N は自然数なので負の数も入っている Int とは違うけれどここでは Int でごまかしておく。 a Nothing = 0 の部分が zero に、a (Just x) = x + 1 の部分が succ に対応する。 さて F-algebra (N,a) から別の F-algebra (B,b) b :: Maybe B -> B に対する射 f はど
wikipedia の F-algebra のページ http://en.wikipedia.org/wiki/F-algebra 参照。 上記ページに集合圏から集合圏への関手F として F(X) = 1 + X という例がでてくるが 1 + X は Haskell では Maybe X である。 Maybe の定義 data Maybe a = Nothing | Just a の「Nothing」が「1」に、「|」が「+」に、「Just a」 が「X」にそれぞれ対応する。 F(f) は fmap f である。 F-algebra の説明にでてくる A を Bool、B を Int とし a :: Maybe Bool -> Bool a Nothing = False a (Just x) = x b :: Maybe Int -> Int b Nothing = 0 b (Just
最近ちょっと気になるiterateeを勉強したので、日本語の解説を書いてみます。と言いつつ、大部分が The Monad.Reader Issue 16 *1 からの引用です。 はじめに Iterateeと呼ばれる新たなI/Oの抽象化手法が、最近にわかに広まりつつあります。既存のI/Oが抱える問題を解決するべくOleg Kiselyovによって2008年頃に提唱されたiterateeは、新しい高性能webフレームワークsnap *2 や、hyena *3 で利用されています。また、HackagDB上にて、iterateeパッケージ*4、およびiterateeを利用できる様々なパッケージ *5 *6 *7 *8 が公開されています。 しかし、ドキュメントの少なさなどからiterateeがどういうものなのかよく分からないという人も多いようです。そういうわけなので、iterateeを易しく解説し
./BrowseType Prelude のように使うと (snip) break = forall a. (a -> GHC.Bool.Bool) -> [a] -> ([a], [a]) catch = forall a. GHC.Types.IO a -> (GHC.IO.Exception.IOError -> GHC.Types.IO a) -> GHC.Types.IO a ceiling = forall a. (GHC.Real.RealFrac a) => forall b. (GHC.Real.Integral b) => a -> b compare = forall a. (GHC.Classes.Ord a) => a -> a -> GHC.Ordering.Ordering concat = forall a. [[a]] -> [a] concatMap =
Eden: Parallel Functional Programming with Haskell Eden extends Haskell with a small set of syntactic constructs for explicit process specification and creation. While providing enough control to implement parallel algorithms efficiently, it frees the programmer from the tedious task of managing low-level details by introducing automatic communication (via head-strict lazy lists), synchronisation,
スマートコン @mr_konn 本質は (>=>)でありながら実用するのが圧倒的に (>>=) であるせいでモナド則がグロテスクに見えすぎる。モナド怖い病の原因ですね…… スマートコン @mr_konn モナド則の恐ろしいところは、『左右単位元が存在し、結合法則がなりたつある種の関数合成』を持つデータ構造、という簡潔な条件だけでほぼあらゆる副作用を表現出来てしまうところにあると思う でちまるさん(実際かわいい) @decimalbloat @mr_konn もう一つ、 return >=> f = f, f >=> return = f, (f >=> g) >=> h = f >=> (g >=> h) だけ言われても「で、これは何?」「モナドです」という押し問答にしかならないこと
Haskell では、Y コンビネータが作れないと誤解している人がいるので、できることを示すと同時に、これまで学んだことをまとめてみます。 遅延評価を活かした Y コンビネータ 関数名を用いた再帰を使ってよいなら、Haskell では遅延評価のおかげで、Y コンビネータを定義である Y x = x (Y x) の通りに書けます。 y :: (a -> a) -> a y x = x (y x) Y コンビネータ用の階乗を定義してみましょう。 fact :: Num a => (a -> a) -> a -> a fact = \f n -> if n == 0 then 1 else n * f (n-1) 以下のように動きます。 y fact 4 → 24 でも、この階乗は Haskell っぽくないので、入り口で分岐するように書き直してみます。 fact :: Num a => (a
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く