関数型プログラミング言語Haskell Part3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
Http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
過去ログ、関連スレは>>2-5
0002デフォルトの名無しさん
NGNG関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
関数型言語
Part1 http://pc.2ch.net/tech/kako/987/987954395.html
Part2 http://pc3.2ch.net/tech/kako/1007/10073/1007387924.html
Part3 http://pc2.2ch.net/test/read.cgi/tech/1037527388/l50
純粋関数型言語Concurent Clean
http://pc2.2ch.net/test/read.cgi/tech/1075629340/l50
ML!!!!!!
http://pc.2ch.net/tech/kako/1002/10021/1002111468.html
関数型プログラミング言語ML
Part1 http://pc2.2ch.net/tech/kako/1012/10124/1012445015.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1058630709/l50
0003デフォルトの名無しさん
NGNGPart1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: http://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: http://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: http://ruku.qp.tc/dat2ch/0311/20/1042167213.html
Part8: http://pc2.2ch.net/tech/kako/1058/10582/1058263391.html
Part9: http://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part10: http://pc2.2ch.net/test/read.cgi/tech/1075630259/l50
CommonLisp初心者スレ
http://pc2.2ch.net/test/read.cgi/tech/1075464728/l50
Emacs Lisp
Part1 http://pc2.2ch.net/test/read.cgi/tech/1004551074/
Part2 http://pc2.2ch.net/test/read.cgi/tech/1068467385/l50
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG>>1乙。
# MLスレの571他です。
0007デフォルトの名無しさん
NGNGotu!
0008デフォルトの名無しさん
NGNGIO 関係ない関数での引数が気に入らないとかのエラー処理は、Maybe でやるのが Hakell 流なんでしょうか?
それとも容赦なく error が使っちまうべきなんだろうか?
0009デフォルトの名無しさん
NGNG> IO 関係ない関数での引数が気に入らないとかのエラー処理は、Maybe でやるのが Hakell 流なんでしょうか?
Yes. Maybeがモナドであることの有難味がわかるよ。
0010デフォルトの名無しさん
NGNGMaybe だといちいち Just か Nothing か判定して、
fromJust とかしいといけないから、めんどうだと思ったんだけど。
いまいち自分が Maybe を理解してない気もするな。
> Yes. Maybeがモナドであることの有難味がわかるよ。
その有難味を具体的に教えてください。
0011デフォルトの名無しさん
NGNG例えば
-- f, g x, h xのいづれかがNothingを返したとき、value_in_error_caseを返す。
(f >>= g >>= h) `maybeCatch` value_in_error_case
ここで
maybeCatch = flip . fromMaybe
# ヒントをもらったら答えを聞く前に自分で考えてみるようにしたほうがいいと思う。
しかし、本当に
> 引数が気に入らない
が問題だというなら、より正しい対処は(適切な抽象型をもちいるなどして)
そんなことがおこらないようにすること。
何か計算の結果が不確定である場合はしかたがないが。
アボートしていいプログラムやassertionならそもそもIOでのcatchもtryもいらない。
errorでいいし、時にはパターンマッチの失敗だけでいい。
f x | validity_check x = ...
0012デフォルトの名無しさん
NGNG> その有難味を具体的に教えてください。
いちいち Just か Nothing か判定したり、
fromJust とかしなくていいところ。
0013デフォルトの名無しさん
NGNG(Just x) >>= k = k x
Nothing >>= _ = Nothing
とかで、気にせず Maybe 付いたままでいけばいいんだね。
どうもありがとう。
0014デフォルトの名無しさん
NGNG小さなことだけど。
× flip . fromMaybe ○ flip fromMaybe
ですよね。
0015デフォルトの名無しさん
NGNGHaskell で bank accounts を実装するとどうなるのでしょうか。
0016デフォルトの名無しさん
NGNGbank accountsと一口にいわれてもよくわからないが…
こういうこと(カプセル化)でないなら、
期待しているものが載ってるURLをくれ。
ポリモルフィズムはtype class。
継承は難しい。
# OOA, OODが全てではない。
-- テストしてない
module BankAccount (
-- Do not export any constructor.
name, money, newAccount
--, query, ...etc
) where
data Account = Account String Integer
name (Account s m) = s
money (Account s m) = m
newAccount (s, m) = Account s m
-- data Database = Database [Account]
-- query (Database as) nm = filter ((== nm).name) as
0017デフォルトの名無しさん
NGNG> OO 言語だと、最初は大体 bank accounts の説明から始まりますよね。
考えが古典的過ぎるのでは?
C の構造体がどうのこうのとか。
0018デフォルトの名無しさん
NGNGこういうのをお願いします。アカウントを複数作れて、それぞれに withdraw, deposit
可能な感じです。
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#%_sec_3.1.1
>>17
状態遷移を扱う例が他に思いつかなかったもので。OO かどうかにはこだわっていません。
0019デフォルトの名無しさん
NGNGdepositだけ実装。
どうしても
> (withdraw 25)
> 75
> (withdraw 25)
> 50
こんなことがしたい、という意味?
それとも、こういう機能があればいいのか?
例:
$ ./a.out
>> Status: [(0,100),(1,1000),(2,300)]
Deposit 1 300
Deposit 2 400
>> Status: [(0,100),(1,1300),(2,700)]
^D
前者なら、
make_withdraw :: IORef Account -> Money -> IO Money
make_withdraw ref money =
do {x <- readIORef ref; writeIORef ref (x - money); readIORef ref}
というのを作っておいて、
ref_account <- newIORef newAccount
let withdraw = make_withdraw ref_account -- :: Money -> IO Money
とする。
後者なら、普通は前者のような設計はしない。
0021デフォルトの名無しさん
NGNG× make_withdraw :: IORef Account -> Money -> IO Money
○ make_withdraw :: IORef Money -> Money -> IO Money
0022デフォルトの名無しさん
NGNGどうもありがとうございます。
毎回出力する必要は無いので、後者だと思います。
0023デフォルトの名無しさん
NGNG> 毎回出力する必要は無いので、後者だと思います。
なんかずれてるような。
> (withdraw 25)
> 75
> (withdraw 25)
> 50
このwithdrawは(同じ引数に対して別の値をかえすので)
関数じゃないというのはわかってる?
だから、
withdraw :: Int -> Int
ではなくて
withdraw :: Int -> IO Int
になる。別にIO Intにしたからって毎回出力するわけじゃないよ。
0024デフォルトの名無しさん
NGNGdepositだけ実装。
============================
module Main where
import Data.FiniteMap
import Data.Maybe
type Database = FiniteMap Int Int
-- errors are silently ignored.
deposit :: Database -> (Int, Int) -> Database
deposit db (nm, mon)
= fromMaybe db (lookupFM db nm >>= return . addToFM db nm . (+ mon))
testDB :: Database
testDB = listToFM [(0, 100), (1,1000), (2, 300)]
data Cmd = Deposit Int Int | Withdraw Int Int | Print | Error
deriving Read
============================
続く
0025デフォルトの名無しさん
NGNGmain = loop testDB
where
loop db = do s <- getLine
cmd <- catch (readIO s) (\e -> return Error)
case cmd of
Deposit i m -> do loop $ deposit db (i, m)
Print -> do putStrLn $ ">> Status: " ++ show (fmToList db)
loop db
_ -> do putStrLn ">> Sorry, not implemented"
loop db
============================
終わり
0026デフォルトの名無しさん
NGNGどうもありがとうございます。
>このwithdrawは(同じ引数に対して別の値をかえすので)
>関数じゃないというのはわかってる?
なるほど。感覚的に難しいですね。頂いたコードはじっくり読ませて頂きます。
初心者なもので、時間がかかりそうですが。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGサイトはありますか?
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGhttp://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=Haskell
UNIXコマンドのHaskellでの実装が多数あります。
というか、僕が書いたものが多いですが。
wikiなので勝手に書きこんじゃいました。
解説はしてませんが、短いコードが多いです。
参考になればうれしいです。
それと、メール欄にsageと書いておくことをようやく学びました。
0031デフォルトの名無しさん
NGNGPreludeの関数を書く、ついてくるPreludeを読むのがお薦め。
0032デフォルトの名無しさん
NGNGuniq 改良版(getArgs...はかわらないのでstdin用)
--
import Data.List
main = interact $ unlines . map head . group . lines
--
basename, wcあたりも面白そうだ。
0033デフォルトの名無しさん
NGNGやられた。
そうか、groupが使えたか。
ちょっと悔しいな。
改良版も加えておきます。
003428
NGNGいろいろなコードをちまちまハックしたいと思います。
Haskell はまだリファレンスだけでは全くかけないので。
0035デフォルトの名無しさん
NGNGf 3 a => [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
といった値を返す関数 f が欲しいのですが、
Haskell に標準であるでしょうか?
0036デフォルトの名無しさん
NGNG無いとは言いきれないけどね。
いちおうお求めの関数は
f :: Int -> [a] -> [[a]]
f num lst
| length lst >= num = take num lst : f num (tail lst)
| otherwise = []
でいいとは思います。
0037デフォルトの名無しさん
NGNGf num lst以下の2文はインデントを深くしないと、だめです。
いちおう念のため。
0038デフォルトの名無しさん
NGNGg :: Int -> [a] -> [[a]]
g num lst = mapMaybe (myTake num) (tails lst)
これだとlst >> numでもOK
0039デフォルトの名無しさん
NGNGmyTake n _ | n < 0 = Nothing
myTake n _ | n == 0 = Just []
myTake n (x:xs) = case myTake (n-1) xs of
Just xxs -> Just (x:xxs)
Nothing -> Nothing
myTake _ [] = Nothing
0040デフォルトの名無しさん
NGNGtakeMaybe n []
| n == 0 = Just []
| otherwise = Nothing
takeMaybe n (x:xs)
| n < 0 = Nothing
| n == 0 = Just []
| otherwise = takeMaybe (n-1) xs >>= \r
-> Just (x:r)
0041デフォルトの名無しさん
NGNGdata は複数形、単数は datum.
-- 知っててやってるんだったら無視して下さい。
-- (data って変数名使えないから、とか。)
あと下から4行目の data は datas の typo でしょう。
0042デフォルトの名無しさん
NGNGimport List
h num lst = [ take num x | x <- tails lst, length x >= num ]
i num = map (take num) . filter ((>=num) . length) . tails
0043デフォルトの名無しさん
NGNG#############################
import Data.Maybe
-- 再帰で書いてみた
f n xs = catMaybes $ f' n xs
where
f' n [] = []
f' n xxs@(x:xs) = (takeJust n xxs):f' n xs
-- AKA myTake and takeMaybe
takeJust 0 xs = Just []
takeJust n [] = Nothing
takeJust n (x:xs) = takeJust (n - 1) xs >>= \xs -> Just (x:xs)
0044デフォルトの名無しさん
NGNG>>36(無限リストにつかえない、何度もlengthを求める)よりは
いいけど、takeとlengthを両方使うのは無駄がおおいのでいまいちかと。
-- テストしてない。多分遅い。
h num lst = filter ((== n) . length) $ f' num lst
where
f' num [] = []
f' num lst = take num lst:f' num (tail lst)
0045デフォルトの名無しさん
NGNG訂正
>>36(無限リストにつかえない、何度もlengthを求める)よりは
と同じだね。
0046デフォルトの名無しさん
NGNGそうか、そういえばそうだったな。
datasなんて単語はないのか。
指摘してくれてありがとう。
ま、いまのところは和製英語ってことで...。
そのうち直します。
日本人だと変数名には苦労するよね。
タイプミスは直しておきました。
0047デフォルトの名無しさん
NGNGなるほど。
lengthを軽々しく使わないほうがいいのかもな。
じゃあ、こんなので
j num = map (take num) . filter (biggerOrEqual num) . tails
biggerOrEqual :: Int -> [a] -> Bool
biggerOrEqual 0 _ = True
biggerOrEqual n [] = False
biggerOrEqual n (x:xs) = biggerOrEqual (n-1) xs
0048デフォルトの名無しさん
NGNG無限リスト対応問題のほうはそれでいけるね。
> biggerOrEqual :: Int -> [a] -> Bool
こういうのが欲しくなることは結構ある。おれは
大体再帰で頭を落としていくようにくむから、[]との比較ですむけど。
書くならこうかな。
biggerOrEqual n xs = [] /= drop n xs
004948
NGNG0050デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGなるほど、dropはnが大きすぎると[]を返すんだね。
きれいなやりかただ。
で、35の関数はわかりやすさと効率を考えると
以下のものがいいということになる?
38とほぼ同じ。少し見やすくしてみた。
効率がいいのはこれなのかな。
それとnum < 0のときはデフォルトのエラーを起こすようにした。
k num = mapMaybe (takeOfMine num) . tails
takeOfMine 0 _ = Just []
takeOfMine n [] = Nothing
takeOfMine n (x:xs) = maybe Nothing (Just . (x:)) $ takeOfMine (n-1) xs
0053デフォルトの名無しさん
NGNGそんなもんかな。
# 個人的にはtakeOfMineは>>43のtakeJustのほうが
# Haskellらしくて好きだけどね。(48 == 43だったりする:-)
0054デフォルトの名無しさん
NGNGMaybe Monadってやつね。
僕も好きだな。
でもこっちのほうが好き。
takeJust n (x:xs) = do xs <- takeJust (n-1) xs
return (x:xs)
なんか手続き型言語に擬態してるかんじが好き。
0055デフォルトの名無しさん
NGNGどうしたらいいんだろう。
上の例ではreturn (x:xs)はxs <- takeJust ...にきっちり合わせないとエラー。
0056by Chalice
NGNG> なんだろ、インデントが重要な言語だと、困るよね。
いや、困らん。
…でも困る人は{...;..;.}って書けばいい。
とここまでかいて、他の人はIEとかで
プロポーショナルフォントでみているのだと気づいた。困るかも。
0057デフォルトの名無しさん
NGNGk 0 xs = [[]] ++ [[]|x <- xs]
k n xs = [x:y|(x,y) <- zip xs (k (n-1) (tail xs))]
0058デフォルトの名無しさん
NGNGインデントを掲示板でちゃんと表示できたらいいと思ったからさ。
> takeJust n (x:xs) = do xs <- takeJust (n-1) xs
> return (x:xs)
こう書けばいいのかな。
0059デフォルトの名無しさん
NGNG同じトピック内で同名関数が定義されたため、参照透明性が破られてしまいますた。
は冗談として、
m 1 xs = [[x] | x <- xs]
m n xs = [x:xs | (x,xs) <- zip xs $ m (n-1) $ tail xs]
でどうだろう。
0060デフォルトの名無しさん
NGNGかなりきれいな解法だと思う。
いままでで一番いいかも。
0061デフォルトの名無しさん
NGNGいや,f 0 にはそれなりの根拠があるので生かしておいて
f n [] = []
f n xxs@(x:xs) = top n xxs ++ f n xs
top 0 xs = [[]]
top n [] = []
top n (x:xs) = map (x:) $ top (n-1) xs
0062デフォルトの名無しさん
NGNGf n [] = []
f n xs = top n xs ++ f n (tail xs)
top 0 xs = [[]]
top n [] = []
top n (x:xs) = map (x:) $ top (n-1) xs
0063デフォルトの名無しさん
NGNGtake* n ≒ top だね。map, ++ の使いかたあたりが微妙に遅そうにみえる。
>>57が綺麗でよさそう。
# k 0 xs = []:[[]|x <- xs]
# k n xs = zipWith (:) xs (k (n-1) (tail xs))
0064デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGf n xs = zipN $ take n $ tails xs
zipN xss = if any null xss then [] else map head xss : zipN (map tail xss)
ただし f 0 xs で暴走。
0067(define (´∀`) 'マターリ)
NGNGf n xs = [[xs !! (x + y) | y <- [..n-1]] | x <- [..(length xs)-n]]
0068デフォルトの名無しさん
NGNGたぶん、
× [..n-1] [..(length xs)-n]
○ [0..n-1] [0..(length xs)-n]
でしょう。
この場合、僕がはじめに作った関数同様、
無限配列で使えないので解としては、やや劣ると思われます。
それと、いちいち(!!)を使うのは効率上どうなんだろうか。
処理系なしで作ったのならしかたないか。
普段はlispを使っているようですね。
はじめにいれる処理系はhugsがおすすめ。
多少なじんできたら、がんばってghcをいれるといいかも。
>>66
いいね。
これもわりと感動もんかも。
単純な処理だと思っても以外と奥が深いもんだな。
以下は別に新しい考えかたは何もないですが、
上のほうで作っていた関数を見やすくしてみました。
p n xs = if drop (n-1) xs == [] then [] else take n xs : p n (tail xs)
dropとtakeを両方使ってるあたりが泥臭いかも。
無限配列を扱えるもののなかで最も素直な解だと思う。どうかな。
0069デフォルトの名無しさん
NGNGしまった。
書き込んでから気付いたのだが、これだと
p :: Eq a => Int -> [a] -> [[a]]
になってしまう。
まあ、素直な解ということで許してほしい。
0070デフォルトの名無しさん
NGNG# q n = filter ((==n).length) . k n
# where k _ [] = []
# k n xs = take n xs : k n (tail xs)
どうだろう。
0071(define (´∀`) 'マターリ)
NGNGf n xs = filter ((==n).length) [take n x | x <- tails xs]
0072デフォルトの名無しさん
NGNG>>44の#と一緒。
0073デフォルトの名無しさん
NGNG> f n xs = filter ((==n).length) [take n x | x <- tails xs]
でも素直でわかりやすい。同じだけど:
f n xs = filter ((==n).length) $ map (take n) $ tails xs
「関数のn乗」って関数はなかったんでしたっけ:
f n xs = (iterate chop $ map (take n) $ tails xs) !! n
chop (x:xs) = if null xs then [] else x : chop xs
f n xs = map (take n) $ chopn n $ tails xs
chopn n xs = fst $ foldr _chopn ([], n) xs
where _chopn x (xs, n) = if n > 0 then (xs, n - 1) else (x:xs, 0)
0074デフォルトの名無しさん
NGNG「関数のn乗」 -> ない。
chop -> init
> f n xs = map (take n) $ chopn n $ tails xs
> ....
無限リストに使えん。
気持ちは分かるんだが、
新しい良いアイディアが含まれていなかったり、
明らかに良くない方法だったりするものを
無闇に書き込むのは止めないか?(せめて欠点を併記するとか)
他の初心者が無分別に使うかもしれないし、
いいアイディアのものが埋もれる。
中級者以上(?)には面白くないし。
0075デフォルトの名無しさん
NGNG> 「関数のn乗」 -> ない。
なぜないんでしょう,あってもよさそうなのに。
> chop -> init
ありがとう。では直しておきます。
f n xs = (iterate init $ map (take n) $ tails xs) !! n
これは無限リストで大丈夫ですね。
> 新しい良いアイディアが含まれていなかったり、
> 明らかに良くない方法だったりするものを
> 無闇に書き込むのは止めないか?(せめて欠点を併記するとか)
欠点を併記するというのはいいですね。でも,今まで前を拾うこ
とばかりしいたから,今度は後ろを落としてみたらどうかという
発想なので「無闇に」というのとは違いますよ。
0076デフォルトの名無しさん
NGNG手許に処理系ないんだけど、foldl とか (.) とかで簡単に作れそうな。
007774
NGNG> 発想なので「無闇に」というのとは違いますよ。
失礼。
あなただけに書いたわけではなくて、>>70-71などを指していた。
> 「関数のn乗」
(iterate f x) !! n が普通なんだろうけど、
自分でtail recursiveな
nest :: (a -> b) -> a -> Int -> b
nest' :: (a -> b) -> a -> Int -> b -- strict
あたりを書いたほうが、速くていいね。
標準にあったほうがいいというのに同意。
> 手許に処理系ないんだけど、foldl とか (.) とかで簡単に作れそうな。
foldlは無駄な処理をするのでまずい。
composition f n = foldr (.) id $ replicate n f
あたりか。
007974
NGNGnest :: (a -> a) -> a -> Int -> a
だね。
0080デフォルトの名無しさん
NGNG> 標準にあったほうがいいというのに同意。
ですよね。標準でないのは f^n は複数の n に対して評価する
可能性があるのでリストにキャッシュしておけ,という主張か
とも思ったのですが。あっても悪くない気がします。
f n xs = (transpose $ map inits $ tails xs) !! n
(制限:n は xs のサイズ以下,無限リスト可)
0081デフォルトの名無しさん
NGNGHaskellのリストは一つの型しか保持できない。
しかし、複数の型であっても、その間に「関係」があれば、
それらの型をラップし、一つのリストにいれた上で使用することができる。
--------------
{-# OPTIONS -fglasgow-exts #-}
-- different types
data A = A String deriving Show
methA (A x) = length x
data B = B Int deriving Show
methB (B x) = x
-- but they have the methods of the same return type Int
data C = forall x. C x (x -> Int)
runC (C x f) = f x
testC = map runC [C (A "I am A") methA, C (B 100) methB]
-- if they belong to the same type class
data ShowC = forall x. (Show x) => ShowC x
instance Show ShowC where
show (ShowC x) = show x
testShowC = show [ShowC $ A "I am A", ShowC $ B 100]
-- nearly nonsense
data X = forall x. X x
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGhttp://www.amazon.com/exec/obidos/tg/detail/-/0077093305/
久々の新刊かも
0085デフォルトの名無しさん
NGNG豪快に割引されてますな。
0086デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ #554
一年以上も前に。
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGペーパーバックで5000円か…
0089デフォルトの名無しさん
NGNGできあがる実行ファイルがでかすぎる
0090デフォルトの名無しさん
NGNGMinimulコードでどれぐらい?
0091デフォルトの名無しさん
NGNG@ Mac OS X 10.3
--- Hello.hs
module Main where
import Graphics.UI.WX
main :: IO ()
main = start hello
hello :: IO ()
hello =
do
f <- frame [text := "Hello world!"]
quit <- button f [text := "Quit", on command := close f]
set f [layout := widget quit]
---
$ ghc -package wx -o hello Hello.hs
で、helloのサイズが7M強。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNGツールキット全部そんなかに入ってんじゃないの?
だったら仕方ねぇと思うけど。
外出しには出来ねぇのかな?
0095デフォルトの名無しさん
NGNGどうすればいいのだろう?
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNGb) packageを持ってきてpkg_add
0098デフォルトの名無しさん
NGNG安定してきてリリースする間際にコンパイラに移行するの?
インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い?
Haskellってコンパイル撃遅い(というか長い)ッてきいたけどマジ?
0099デフォルトの名無しさん
NGNGGHC のコンパイルには GHC バイナリが必要です
>>97
ports や package は教育上入れてもらえない学生さんなんですよ
0100デフォルトの名無しさん
NGNGFreeBSD の ftp サーバの ports/distfiles に
ghc-<version>-i386-unknown-freebsd-boot.tar.bz2 があるからこれを展開して,
ghc のコンパイル時にこの展開先にある ghc を指定してコンパイルすればok.
ちなみに ports も同じことをしている(処理が自動化されてるだけ).
>>98
コンパイルはたしかに激遅.
プログラマが楽するためにコンピュータに頑張ってもらってる感があるね.
0101デフォルトの名無しさん
NGNGhttp://www.sampou.org/haskell/report-revised-j/
■ このスレッドは過去ログ倉庫に格納されています