循環プログラミングに驚いた(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 »

翻訳: The Architecture of Open Source Applications (Volume 2): The Glasgow Haskell Compiler

この記事はThe Architecture of Open Source Applications (Volume 2): The Glasgow Haskell Compilerの翻訳です。 The Glasgow Haskell Compiler Simon MarlowとSimon Peyton-Jones Glasgow Haskell Compiler(GHC)は次のいくつかの目標と共に、1990年代の初めに英国政府によって学術研究プロジェクトの一環として設立されました。 堅牢で移植性があり、 »

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 »