循環プログラミングに驚いた(repmin problem)

GHC拡張RecursiveDoが何か知りたく、https://ocharles.org.uk/blog/posts/2014-12-09-recursive-do.html この記事を読んだ。 RecursiveDoに到達する以前に単に遅延評価に衝撃を受けたのでシェアさせていただきます。 repmin problem というもの。 何らかのtraversableなもの、例えば次のような木構造を、 Tree 4 [Tree 6 [], Tree 2 []] 木構造内の一番小さい値をつかって更新したい、 Tree 2 [Tree »

GHCでCall Stackを表示する

テストのassertationやエラーログなどで使う。 GHC.Stackを使うとstackを取得できる。 {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ImplicitParams #-} import Data.Text (Text) import GHC.Stack main = do putStrLn "before error" printStack - line »

Equality constraints (GHC拡張)

関数の型のコンテキストでのチルダ(~)はなんだろう GHC拡張のEquality constraintsで、 t1 ~ t2 型t1とt2が等しいというのを示す。 いつ使うのだろう Type Familiesを使っている時に必要なる。 associated typeを使ったクラスのあるインスタンスが前提だが、そのモジュールは参照したくないモジュールで利用。 -- module A class A type Foo a -- module B import A »