Haskell

任意の型の引数を無限に消費する空腹関数はHaskell(GHC)では書けないのか?

Schemeでいうと (define (hungry x) hungry) みたいなやつ。ここまではできた。参考: https://github.com/jstolarek/sandbox/blob/master/haskell/Hungry.hs Prelude> :set -XRankNTypes Prelude> data Hungry = Hungry { (%) :: forall b. b -> Hungry } Pr…

はじめてのQuineリレー

概要 昨日、自分自身を出力するHaskellプログラムを生成するOCamlプログラムを生成するSchemeプログラムを生成するRubyプログラムを生成するJavaScriptプログラムを生成するCプログラムを書いた。 #include<stdio.h> int main(){char*g="var p=print;p('puts %%^(form</stdio.h>…

Hello, polyglot!

きっかけ: るびま これを読んでpolyglotするかーって思った. 今回のコンセプトは 初めてなのでやさしくHello, world! 好きな言語を盛り込む 140文字以下 以下,Schemeと言いつつGauche決め打ちである. ソースコード できあがったのがこれ. ;(#)={-"^<"v '…

s id id idに型が付かない件について

s id id idに型が付かない. ghci> let s f g h = f h $ g h ghci> :t s id id id <interactive>:1:5: Occurs check: cannot construct the infinite type: a = a -> b Probable cause: `id' is applied to too few arguments In the second argument of `s', namely `id'</interactive>…

型クラスのパラメタ多相?

Either a b(但しaとbは何らかの共通の制約を持つ)に適用できる f g = either g g という関数を書こうとしたが,書けなかった.特定の型クラスに限定すれば書くことができる. {-# LANGUAGE RankNTypes #-} fshow :: (Show a, Show b) => (forall c. (Show c)…

パターンガードとGaucheのutil.match

最近のHaskellにはパターンガードというものがあるらしい. {-# LANGUAGE PatternGuards #-} addLookup alist x y | Just m <- lookup x alist , Just n <- lookup y alist = m + n | otherwise = 0 main = print $ addLookup [(1, 2), (3, 4)] 1 3 -- => 6 …

Leopardにcabalをインストール

HaskellでParsecを使ってみようと思いつつインストールしようにも古代OS故にcabalが入っていないので諦めていたが,ぐぐったらcabalを手動で入れればいいらしいので依存ライブラリを入れていたらいつの間にかParsecが入っていた. というわけで,勢い余って …

データ構造の実装は継承できないのか

Haskellの型クラスは,演算の実装は継承できるけど,データ構造の実装は継承できないのかな? よくあるOO言語ではクラスの継承によってデータ構造も継承できるよね. Haskellの型システムは思ったよりパワーがないなぁと感じたんだけどどうなんだろう.デー…

コマンドライン引数パーザのインタフェース

getoptとかって言語(やライブラリ)によってかなり使い方が違っていて,いつも困る.しかも,どれも(慣れるまで)それなりに分かりにくくて,どう書くのがその言語 "らしい" のかよくわからないことが多い.特にOCamlのArg.parseは何故か副作用ばりばりでやり…

久々にHaskellの練習

Haskellで外部実行ファイルの実行時間を調べる。つづき - 妄想宝箱 やっぱりshowTimeが長い。 http://d.hatena.ne.jp/coppieee/20090426/1240748315 ということで,久々にHaskell書いた. module Main where import System import System.Process import Tim…

FizzBuzz

なんでHaskellはS式で書かないんだろう.静的片付けなS式で書く言語は考えられないのかなぁ. show, read, lines, unlines, putStr, putStrLnを手に入れたので,FizzBuzzを書いてみた. main = putStr $ unlines $ take 100 $ map fizzbuzz [1..] where fizz…

クイックソートとマージソート書いてみた

Haskellの書き方がよくわからないので,入門サイトを見てクイックソートを書き写してみる. qsort [] = [] qsort (x:xs) = qsort [y | y <- xs, y < x] ++ [x] ++ qsort [y | y <- xs, y >= x] main = print (qsort [3, 1, 4, 1, 5, 9, 2, 6]) うーん. マー…

GHCインストール

GHCの公式サイトっぽいところからバイナリをダウンロード. 最新バージョンは6.8.3だったけど,PPC対応なのがMacOS 10.4以降+PPC G5のしかないみたいだったので,古いバージョンを探すことに. ざっと見た所,6.4.1が10.3+PPC G4で動きそうだったのでインス…