Haskell

GPU Programming in Haskell

つい最近までCUDAに苦しめられていたので、GPU Kernels as Data-Parallel Array Computations in Haskell http://www.cse.unsw.edu.au/~chak/papers/gpugen.pdfObsidian: GPU Programming in Haskell http://www.cse.chalmers.se/~joels/writing/dccpaper_ob…

Arrow

圏論ばっかやってると飽きる。まあ、モナドが色々な場面でよいインターフェースだという点については、概ね合意が得られてると思うんだけど、Arrowはどうなんかな〜っていうか、そもそも、Arrowとか、まともに使ってるライブラリが殆どないので、よーわから…

トレースと不動点

Traced Premonoidal Categoriesを読んだ。ある種のモノイダル圏では、traceと不動点作用素(正確には、parametrized fixpoint operatorでConway作用素と呼ぶらしい)が本質的に同じものだという、なんか不思議な話。元々は、traced monoidal categoryの定義を…

型クラス

Preludeの関数と、ByteStringの関数は、名前と機能が重複してるものが大量にあるのだけど、普通に両方使おうとすると Prelude> :m + Data.ByteString Prelude Data.ByteString> :t length <interactive>:1:0: Ambiguous occurrence `length' It could refer to either `le</interactive>…

Prolog

まあPrologでもかじってみるか Embedding PROLOG in HASKELLしかし、実装がないっぽいなー。http://www.opensubscriber.com/message/haskell-cafe@haskell.org/1953765.html には一部間違ってるとか書いてあるし、うーん

Djinn

で、上の話と関係しなくもないけど、与えられた型を持つhaskellの関数を返してくれるらしい http://lambda-the-ultimate.org/node/1178原理がよく分からん。 For the curious, Djinn uses a decision procedure for intuitionistic propositional calculus d…

Dynamic

existential typeとTypeableを組み合わせれば {-# OPTIONS -fglasgow-exts #-} import Data.Typeable data HsVal = forall a.(Typeable a)=>HsVal a integerP :: HsVal -> Bool integerP (HsVal z) = if (typeOf z)==(typeOf (1::Integer)) then True else F…

Haskellで書かれたtheorem prover

http://www.haskell.org/haskellwiki/Libraries_and_tools/Theorem_provers 一杯ありすぎですそんな中で、唯一スタンドアローンなアプリケーションではなく、ライブラリであるIvor(なんて読むんだ)が楽しそうな http://www.dcs.st-and.ac.uk/~eb/ivor.php EC…

Haskellにもscanfを

Haskellでも、scanfが欲しいぜという意見をどっかで見た。まあ確かに、"2007/01/18"とかを、(2007,01,18)に分解するときにParsecを使うとかは、オーバーキルな感が。いや、そういうときは、lex使うんだよ!Preludeにはいってる。 Prelude> lex "2004/03/12" […

Haskore

なんとなく、template Haskellに興味が沸いたりしてDSL Implementation in MetaOCaml, Template Haskell, and C++ などを眺めていたら、examples of Embedding DSLとして、Haskoreというのがあがっていたのだった。 サイト http://www.haskell.org/haskore/ …

多引数flipをポイントフリースタイルで書く

http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20061220#p02 経由で http://haskell.g.hatena.ne.jp/jmk/20061220/1166594317 と、あと http://www.lab2.kuis.kyoto-u.ac.jp/~hanatani/tdiary/?date=20041210 が動機。 方針:n-引数flipは、一般にn!個のバリ…

read

http://www.zvon.org/other/haskell/Outputprelude/Read_c.html http://www.zvon.org/other/haskell/Outputprelude/read_f.htmlreadは主に、文字列で表記された数値をIntegerなりFloatなりに変換するための関数(かどうかは知らないが)。Readって便利だな〜と…

formal semantics for Haskell

Report on the Programming Language Haskell 98, A Non-strict Purely Functional Languageを眺めた。Haskellのformal semanticsが欲しかったんだけど、完全なformal semanticsって定義されてないのか、ぬうWhy should Haskell have an operational semanti…

unfold

unfoldrとか使ったことないのが敗因な気が import Data.List(unfoldr) --hoge = [0..] hoge = unfoldr (\x -> Just (x,x+1)) 0 --huga = [0,1,2,3,4,5,6,7,8,9] huga = unfoldr (\x -> (if (x <10) then Just (x,x+1) else Nothing)) 0 --leibnitz inifinity…

Parametricity、Genericity

GHC.Baseの定義見ると、 foldr :: (a -> b -> b) -> b -> [a] -> b build :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a]ってなってんだよね。forall付けていいときとダメな時の差がわかんねーと思って、 Theorems for free(P.Wadler) http://www…

Simplifier

至って普通のGHCだけど、Core Simplifierが面白い。 Playing by the Rules: Rewriting as a practical optimisation technique in GHC どうでもいいけど、実装系の話はPeyton Jonesの独断場だな {-# OPTIONS -fglasgow-exts #-} {-# RULES "map/map" forall …

STG

頑張れば、GHCの吐くCも読めそうな気がしてきた。が、どっちかというと、C--コードを読んだ方がよい気がする。アセンブリもまあ、STGマシンのレジスタと実機のレジスタの対応関係が分かれば読めそうな気がする(対応関係とかは、include/Regs.hあたりみれば分…

HGL

Windows上で、HGLを使おうとした場合、うちで起こる現象 ・ghciの場合→そもそも、窓が開かない ・runghcの場合→窓は開くし、場合によっては描画を行ったりもするものの、すぐ死ぬ。HGL何ですぐ死んでしまうん? ・コンパイルした場合→実行ファイルをダブルク…

Arrow

1992年、「非常に複雑で習得するのが難しいため、誰にもプログラマ市場をあふれさせることができないような言語があったとしたら、どうだろう。」と、Wadlerは考えました。実際のところは、C++、つまり、Stroustrupからアイディアをいただいたんですが。そし…

GHCライブラリ

Haskellの標準ライブラリを少し眺めていたので、メモ。GHC6.6がリリースされてるけど、6.4.2しか調べてない。SRFIと違って、名前から機能が類推しやすくてよい。 http://www.haskell.org/ghc/docs/6.4.2/html/libraries/index.html ファイル入出力 http://ww…

(>>=)演算子の引数の順がKleisli Tripleと合ってなくて、キモイと思ったけど、(>>=)は結合律を満たすので、中置記法にするのは自然。(bind f (bind g h))だと、結合律が陽に見えない。そして、敢えて、引数の順序を入れ替えることで、中置記法にした時、例え…

unsafePerformIOはよくわからん import System.IO.Unsafe main= do {c<-getChar; if (c ==':') then (putChar '\n') else (putChar c)>>main}のつもりで、 import System.IO.Unsafe main= let c = unsafePerformIO getChar in if (c ==':') then (putChar '\…

Haskellは素晴らしい

何故か、Vertigoのソースを眺めていたら(読めない)、IOExtsをimportしていたので、調べて見たら、unsafePerformIO :: IO a -> aとかいう関数が。一旦、モナド界に行ったら、現世には帰ってこれないはずなんじゃ・・・。Maybeモナドにも、fromJustとかあるし。む…

,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;; {;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; Haskell使ったら負けかな ヾ;;;ハ ノ .::!lリ;;r゙ `Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が ,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f 俺にもありました ~''戈ヽ `二´ r'´:::.…