タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

haskellとtipsに関するemonkakのブックマーク (6)

  • Debug.Traceで関数の引数を表示するイディオム - maoeのブログ

    Haskellでよくある複数行の関数定義だったり、ガードを使っている場合、全ての場合について引数をtraceするコードが書きにくいことがある。例えば、 data A = A1 | ... data B = B1 | ... data C = C1 | ... f :: A -> B -> C -> ... f A1 b c = ... f a B1 c = ... f a b C1 = ... こんな定義でaとbとcをどの場合についてもtraceしたい場合、各行にそれぞれtraceを書く必要がありそうに見える。 f :: A -> B -> C -> ... f A1 b c = traceShow (A1, b, c) $ ... f a B1 c = traceShow (a, B1, c) $ ... f a b C1 = traceShow (a, b, C1) $ ... そうい

    Debug.Traceで関数の引数を表示するイディオム - maoeのブログ
  • cabal installで依存関係を自動で解決させる - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    cabal installで依存関係を自動で解決させる - Qiita
  • 関数型言語的な正しいマージソートの書き方 -

    関数型言語のリストというのは、大抵 cons と empty の組み合わせでできているわけで、そのリストを split しようとすると、真ん中を探すために末尾まで調べないといけないという事があったりして非常に非効率です。 なので、split しないマージソートを書くと速くなりそうです。書きました。 split するマージソート split は適当に Google 先生に調べてもらった物をほとんどそのまま使っています。無責任ですが間違っていても知りません。 mergesort :: Ord a => [a] -> [a] mergesort = mergesortBy compare mergesortBy :: (a -> a -> Ordering) -> [a] -> [a] mergesortBy _ [] = [] mergesortBy _ [x] = [x] mergesort

  • Chapter 25. Profiling and optimization

    Haskell is a high level language. A really high level language. We can spend our days programming entirely in abstractions, in monoids, functors and hylomorphisms, far removed from any particular hardware model of computation. The language specification goes to great lengths to avoid prescribing any particular evaluation model. These layers of abstraction let us treat Haskell as a notation for com

  • ループ - EAGLE 雑記

    http://tnomura9.exblog.jp/12169729/ 自分で再帰を書かなくてもどっちもなんとかなる. 以下 import Control.Monad しているということで n 回ループ 今何回目のループかを知りたいときはリストを使って forM_ [1..n] $ \i -> do putStrLn $ "loop " ++ show i みたいに書けるし,それが不要な場合は replicateM_ n $ do putStrLn "loop!" とも書ける. 条件を満たすまでループ sequenceUntil_ :: Monad m => (a -> Bool) -> [m a] -> m () sequenceUntil_ p = foldr (\a b -> a >>= \x -> unless (p x) b) (return ()) というように定義しておくと

    ループ - EAGLE 雑記
  • NamedFieldPuns, RecordWildCards - EAGLE 雑記

    初めて知ったのでメモ. NamedFieldPuns 旧名 RecordPuns. レコード型のパターンマッチを書くときの手間を少し減らすもの. もともと data C = C { field1 :: Int, field2 :: String } f C { field1 = x } = x + 1 というようにパターンマッチを書けるのだが,このときフィールド名と同名の変数に束縛することがよく(?)あるので f C { field1 } = field1 + 1 みたいに書けるようになる拡張. RecordWildCards RecordPuns を更に進めてすべてのフィールドに対してそれを行う. g C {..} = field1 + length field2 みたいなかんじ. さらにこれらはパターンマッチだけでなく, let field1 = 2 in f C { field1,

    NamedFieldPuns, RecordWildCards - EAGLE 雑記
  • 1