トップページtech
1001コメント379KB

関数型プログラミング言語Haskell Part6

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/07(火) 21:24:26
haskell.org
http://www.haskell.org/

日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://shidot.dyndns.org/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/

関連スレは>>2
関連書籍は>>3

・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0548デフォルトの名無しさん2007/01/22(月) 00:31:11
>>547
リストはMonadPlusで、内包表記はdo記法の略記。
doの中でマッチングが失敗するとモナドのfailが呼ばれ、リストのfailはmzeroを返すから
その後に続く式が無効化される。
05495482007/01/22(月) 02:06:48
>>548
Prelude> let hoge = zip [1,2,3,4,5] [True,False,True,True,False]
Prelude> do (n,True) <- hoge; return n
[1,3,4]
Prelude> hoge >>= \(n,True) -> return n
[1*** Exception: <interactive>:1:49-69: Non-exhaustive patterns in lambda
なるほど。特別扱いではあるけどユーザも使えるわけですね。
0550デフォルトの名無しさん2007/01/22(月) 19:51:17
do記法ってsyntax sugerじゃなかったのね
0551デフォルトの名無しさん2007/01/22(月) 20:06:18
do P <- E ; REST...

E >>= \x -> case x of
  P -> do REST...
  _ -> fail "message"
の構文糖
0552デフォルトの名無しさん2007/01/22(月) 23:45:48
>>551
> doの中でマッチングが失敗するとモナドのfailが呼ばれ
というところが構文糖だけじゃないんじゃない?ということだと思う。
0553デフォルトの名無しさん2007/01/22(月) 23:47:25
すまん、書いてから551をじっくり読んだ orz
0554デフォルトの名無しさん2007/01/23(火) 02:07:43
Haskell98はdo経由せずにそのまま変換するようになってるな
[ e | p <- l, Q ] =
  let ok p = [ e | Q ]
      ok _ = []
  in concatMap ok l
[ n | (n,True) <- zip [1,2,3,4,5] [True,False,True,False,False] ]
  => let ok (n,True) = [n]; ok _ = [] in concatMap ok (zip [1,2,3,4,5] [True,False,True,False,False])
意味はほぼ一緒だが
0555デフォルトの名無しさん2007/01/23(火) 02:27:29
>>554
Haskell98ではなくて、GHCではそうだね。
0556デフォルトの名無しさん2007/01/23(火) 15:17:18
update :: Assoc a b -> a -> b -> Assoc a b
update h x v y | x == y = v
| otherwise = lookup h y
という関数の定義に関して、
update :: Assoc a b -> a -> b -> Assoc a b
の第一パラメータとなっている、Assoc a b は、
update h x v y | x == y = v
| otherwise = lookup h y
という実装において、
Assoc a b の a が h に、 b が x に対応しているのでしょうか?

よろしくお願いします。
0557デフォルトの名無しさん2007/01/23(火) 16:08:51
>>556
type Assoc a b = a -> b
と定義してあると思うので、それを前提にする。

>Assoc a b の a が h に、 b が x に対応しているのでしょうか?
違う。仮引数の型は、
h :: Assoc a b
x :: a
v :: b
y :: a

これは、updateの型をAssocなしで書いてみると分かり易い。
update :: (a -> b) -> a -> b -> a -> b
        h     x   v   y
0558デフォルトの名無しさん2007/01/23(火) 19:05:54
>>557
返信ありがとうございます。

>これは、updateの型をAssocなしで書いてみると分かり易い。
>update :: (a -> b) -> a -> b -> a -> b
>        h     x   v   y

とのことですが、

update :: Assoc a b -> a -> b -> Assoc a b
という定義には、その
>update :: (a -> b) -> a -> b -> a -> b
>      h    x   v   y
                 ↑
にあるような、y に相当するパラメータの指定が、
関数定義に存在していないのが理解できません。

これは何か特殊な仕掛けがあるのでしょうか?
0559デフォルトの名無しさん2007/01/23(火) 19:07:50
>>558
ずれてる。>>557をもう一度見返して。
0560デフォルトの名無しさん2007/01/23(火) 19:35:24
>>558
もっと単純な例を挙げる。

foo :: Int -> String -> Bool

という関数があるとする。これはもちろん二引数関数。
括弧を補って丁寧に書くと、この型は次のようになる。(納得できないならカリー化を復習すべし)

foo :: Int -> (String -> Bool)

ここで(String -> Bool)の部分を別名に置き換えても意味は変わらない。

type StringProp = String -> Bool
foo :: Int -> StringProp

こう書くとfooはいかにも一引数関数だけど、型は最初のfooと変わらない。
よって、実装を書く際は引数を二つ使える。例えば、

foo :: Int -> StringProp
foo n s = length s < n

ついでだが、
>関数定義に存在していないのが理解できません。
「update :: Assoc a b -> a -> b -> Assoc a b」みたいなのは型シグネチャといって、
ふつう定義とはいわないと思う。
0561デフォルトの名無しさん2007/01/23(火) 19:54:15
Haskellの標準GUIライブラリはどこにありますか?
0562デフォルトの名無しさん2007/01/23(火) 20:58:58
どこにも。
0563デフォルトの名無しさん2007/01/23(火) 21:09:00
どこにでも。
0564デフォルトの名無しさん2007/01/23(火) 22:01:08
>>559
>>560
返信ありがとうございます。

理解するに至りました。
どうもありがとうございます。
0565デフォルトの名無しさん2007/01/24(水) 01:49:28
圏論コミュがありえない展開
0566デフォルトの名無しさん2007/01/24(水) 07:48:46
どこどこ
0567デフォルトの名無しさん2007/01/24(水) 18:11:51
どこにも。
0568デフォルトの名無しさん2007/01/24(水) 20:47:37
どこにでも。
0569デフォルトの名無しさん2007/01/27(土) 22:31:06
ソケットプログラミング(TCPもUDPも、IPv6も(!))したいんだが、
何を使うのがお勧め? GHCの付属モジュールにはないようなのだが。

とりあえず、socatという、STDIOをソケットにつなげるツールを
使ってwrapしてみようかとは思っているのだが。

そもそもHaskellでのネットワークプログラミングが、IOと同じ
要領でいいのかどうかも知らないけど。
0570デフォルトの名無しさん2007/01/27(土) 22:58:46
どれでも
0571デフォルトの名無しさん2007/01/27(土) 23:10:12
>>569
>GHCの付属モジュールにはないようなのだが。
Network.Socketじゃだめなのか?
0572デフォルトの名無しさん2007/01/27(土) 23:18:27
>571

な!

http://haskell.org/onlinereport/

が全てだと勘違いしてたよ。どうもありがと。
0573デフォルトの名無しさん2007/01/27(土) 23:18:40
GUIプログラミング(Windows上で)したいんだが、
何を使うのがお勧め? GHCの付属モジュールにはないようなのだが。
0574デフォルトの名無しさん2007/01/27(土) 23:27:34
Windowsだと一応Graphics.UI.ObjectIOがある。
でも資料がほとんどないねぇ。

GHC用のGUIライブラリってwxHaskell, gtk2hsとかほかにも幾つかあるけど、
2006年中に新バージョンがリリースされたものって1つもないよね。
0575デフォルトの名無しさん2007/01/28(日) 00:03:34
色んな人がライブラリを作ってたけど、どれも長続きしないね…
0576デフォルトの名無しさん2007/01/28(日) 00:31:28
サンプル見つけた よくできてる
http://www.haskell.org/ObjectIO/life.html
http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/hslibs/object-io/Examples/Life/

import Graphics.UI.ObjectIO
-- ghc hello.hs -package objectio -o hello.exe -optl "-Wl,--subsystem,windows"
main = startIO SDI () (openWindow undefined window) []
window = Window title controls attrs
  where
  title = "hello world"
  attrs = [ WindowClose $ noLS closeProcess, WindowViewDomain dom ]
  dom = Rectangle (Point2 0 0) (Point2 480 320)
controls = text :+: button
  where
  text = TextControl "Hello" [ControlPos (Center, Vector2 0 50)]
  button = ButtonControl "World" [pos, onClick]
    where
    pos = ControlPos (BelowPrev, Vector2 (-20) 20)
    onClick = ControlFunction $ noLS closeProcess
0577デフォルトの名無しさん2007/01/29(月) 18:44:30
ObjectIOは一度頓挫したのが引き継がれて、GHC-5.02の時期の更新を最後に
開発が止まってるね。
「GTKへの移植は次期リリースで」っていうのを見て期待してたんだけど。
0578デフォルトの名無しさん2007/01/29(月) 19:12:04
しかもVS2005を入れてもいいかなーって状況になりつつあって
気づいたらVisual Haskell 0.2が出てるんですが、
依然としてVisual Haskellさんは問題ありありな感じだったりします?
0579デフォルトの名無しさん2007/01/29(月) 19:30:04
>>578
もちろん、問題ありです。
現状では、Windowsでのプログラミング環境は、meadow + haskell-mode + GHCが一番使いやすいですね。
0580デフォルトの名無しさん2007/01/29(月) 19:49:30
あーやっぱそうですか
問題のありそな処理系使うほどもっさりIDE好きでもないのでスルーしておきますわ

アリガトウ アリガトウ
0581デフォルトの名無しさん2007/01/29(月) 20:08:20
>>580
IDE好きでないとのことですが、
IDEならEclipseもHaskellをサポートしているようですよ。
0582デフォルトの名無しさん2007/01/29(月) 20:25:26
情報ありがと
Eclipseも使う機会無くはないんですが冷静に考えると
haskellで大きいもの書くことがほぼ無いのでテキストエディタとghcで十分な感じです
0583デフォルトの名無しさん2007/01/29(月) 20:31:52
>>581

ttp://061196246067.cidr.odn.ne.jp/soutaro/20041004
> eclipseの標準入力がおかしいとか,実行ファイル名を指定できないとか,
> コンパイルオプションを指定できないとか,むきーってなる.

誰か、むきーってなった人いませんか?
0584デフォルトの名無しさん2007/01/29(月) 20:51:18
>>583
確かに、eclipseのhaskellプラグインも不完全だと思いました。
たとえば、内部でghciを起動したあと、そのプロセスを殺さずに、新たに内部でghciを起動すると、
前のghciのプロセスがそのまま残ってしまう、とか^^;
0585デフォルトの名無しさん2007/01/29(月) 20:54:08
あと、xyzzyのhs-modeも試してみましたが、
自動インデント機能がおかしくなる場合があるのを見つけたので、
結局、haskell-modeに落ち着いたわけです。
0586デフォルトの名無しさん2007/01/29(月) 21:01:37
>>584-585
情報アリガトウ
0587デフォルトの名無しさん2007/01/29(月) 21:26:42
漢は黙ってメモ帳+コマンドプロンプト
0588デフォルトの名無しさん2007/01/30(火) 05:53:45
hasktagって関数をちゃんと認識してくれないときがあるよね
0589デフォルトの名無しさん2007/01/30(火) 21:56:40
EclipseFPでHaskellのソースを
自動整形するのってどうやるの?

できなかったっけ?
0590デフォルトの名無しさん2007/01/30(火) 23:38:11
hasktagsのコードを見れば分かるが、
すんごい単純なコードだったよ。
ちょっと前の話なのであれだけど。
0591デフォルトの名無しさん2007/01/31(水) 15:15:10
さいきんC++でHaskellicなプログラムを書こうとして
名前の長さと括弧の多さにorzとなってる。
0592デフォルトの名無しさん2007/01/31(水) 15:42:09
>>591
C++ではどうがんばってもHaskellっぽく書くのは無理だと思う。
遅延評価ができないから。
0593デフォルトの名無しさん2007/01/31(水) 16:41:05
>>592
遅延評価ができなくとも、HaskellのリストをC++のイテレータだと思えば
リスト周りくらいはイテレータ間の変換として作れそうと思ったのです。
-- なんだかboostにありそうな気もするけど
0594デフォルトの名無しさん2007/01/31(水) 18:56:43
boost::iterator_adaptorsってやつ?
0595デフォルトの名無しさん2007/01/31(水) 19:23:54
http://d.hatena.ne.jp/Cryolite/20061211#p1
こういうのだろうか。

C++は驚くほどなんでもできるけど、何かしようとするといちいち手間が掛かるし、
細かい言語上の制約がうざったいので、遊び道具にするのも一苦労だ。
0596デフォルトの名無しさん2007/01/31(水) 20:08:27
smp版のghc(6.6)使ってる人いる?
core2duoのlinux上で試してるんだけど、独立した計算を2つのthreadで同時に
やると、1つずつやるより遅くなってしまう…

main = do
m1 <- newMVar iv
m2 <- newMVar iv
s3 <- takeMVar m1
s4 <- takeMVar m2
t1 <- forkIO (summer m1 80000000)
t2 <- forkIO (summer m2 80000000)  -- (1)
s1 <- takeMVar m1             -- (2)
s2 <- takeMVar m2
putStr $ "s1: " ++ (show s1) ++ " s2: " ++ (show s2)

summer m n = if s > 0 then putMVar m s else putMVar m 1
where s = summing n 0 -- summingは0からnまでの和を求める関数

上のcodeだと13秒くらいだが,(1)(2)を入れ替える(つまりthread t1の終了を待ってから
thread t2をはじめる)と、9秒くらいになる。
compile時は-smpをつけて、実行時には+RTS -N2を指定してるんだが…
0597デフォルトの名無しさん2007/02/01(木) 00:33:30
TemplateHaskellでコメントって扱えないのかな?
{-# NOINLINE hoge #-} を一杯生成したいんだが
05985962007/02/01(木) 19:57:45
誰かいませんかー?
0599デフォルトの名無しさん2007/02/01(木) 20:06:54
>>596
キャッシュ汚染のせいだと思う・・・
0600デフォルトの名無しさん2007/02/01(木) 20:25:58
>>599
どうもです。
一応summing(0からnまでの和を求める関数)も引数をeagerに評価させて
ほとんどメモリを消費しないようにしてるんだけど…

summing 0 a = a
summing n a | n > 0 && a >= 0 = summing (n-1) (a+n)

これでもキャッシュ汚染は起こりますか?
0601デフォルトの名無しさん2007/02/01(木) 23:03:28
高尚な話題の最中に素人っぽい話で割り込んでごめん。
HaskellのライブラリAPIって、ライブラリのソースから自動生成された
(あまり整理されているとは言えない)ドキュメントしかないの?
Network.Socket の使い方が全くわからず数日間悩んでいるのですが‥‥‥。

例えば receipe 集みたいなサイトご存知でしたら教えてください。
本は「ふつうの〜」しか持ってませんが、網羅的な本があったら
がんばって買ってもいいかも。
0602デフォルトの名無しさん2007/02/01(木) 23:07:53
「入門Haskell」ならある程度リファレンスになるけど、Networkは無いなあ…
0603デフォルトの名無しさん2007/02/01(木) 23:11:00
>>601
論文ぐらいしかないよ。
0604デフォルトの名無しさん2007/02/01(木) 23:30:55
>>601
それしかない。
Network.Socketについていうと、リファレンスにも書いてあるが、
インタフェースはCのAPIそのままだから、そっちを調べるべき。
関数に説明が付いていないのもこれが理由。
0605デフォルトの名無しさん2007/02/01(木) 23:33:18
キャッシュ汚染ってなーに?
0606P2Pソフトを妄想中2007/02/02(金) 00:24:58
>602-604

ありがとう。Cのsocket APIは理解しているつもりなので、想像はできたの
ですが、なんかHaskellicな書き方に慣れないせいか、もうちょっと手引きの
ようなものがあると楽なんですけどね。

なんとかがんばってみます。対向はとりあえずpythonあたりで作って
テスト環境を作ってみないと‥‥‥
0607デフォルトの名無しさん2007/02/02(金) 17:51:57
haskellよくわからないけど
あの不親切なドキュメントみながら書いてみた

import Network.Socket
main = putStrLn =<< do
sock <- socket AF_INET Stream 0
addr <- inet_addr "66.249.89.104" >>= \x -> return $ SockAddrInet 80 x
connect sock addr
send sock "GET / HTTP/1.1\nHost: www.google.co.jp\n\n"
recv sock 10000000 >>= \x -> sClose sock >> return x
0608デフォルトの名無しさん2007/02/02(金) 21:19:00
Network.Socket を利用する理由は?
ふつうにネットワークのクライアントプログラムを書くだけなら、 Network で充分じゃないかな。
それでは無理な細かいところを調整するために Network.Socket はある。

逆に言うと、そういう細かいところの欲求ってのはCレベルのAPIを叩きたいっ
てことなんだから、関数名と型名だけあれば、まあ充分なんじゃない。

使いづらいし、ちょっとわかりづらいってのは同意だが。
0609デフォルトの名無しさん2007/02/04(日) 23:36:03
Control.Monad.Stateってなくなるの?
代用品は?
0610P2Pソフトを妄想中2007/02/05(月) 09:39:47
>607

ありがとう。こっちも、
http://homepages.paradise.net.nz/warrickg/haskell/http/
っての見付けてきて勉強中です。

>608

UDP使いたいのですが、Networkでできる?
あとIPv6も(って、AF_INET6は定義されているが sockaddr_in6 に対応する
ものが無さげな罠‥‥‥)
0611デフォルトの名無しさん2007/02/05(月) 10:00:04
(´・ω・`)haskellにおけるキャッシュ汚染ってなんなのさ・・・
0612デフォルトの名無しさん2007/02/05(月) 11:52:32
>>609
詳しく。
0613デフォルトの名無しさん2007/02/05(月) 12:38:09
>611

Haskellじゃなくて、CPUのキャッシュをコンカレントなスレッドが
奪いあったのではないか、という指摘なんじゃないかと。

正直、core2duoのコアとキャッシュの関係を知らないので
そういうことがおこるかどうかは知らない。普通のSMPで、かつ
スケジューラが十分賢ければ、2つactiveなthreadが走ったら
それぞれのthreadをある程度固定化するようにスケジュールして
くれると思うんだけど。

06146112007/02/05(月) 13:26:20
>>613
さんくす。そういう問題もあるのか・・・。勉強になりますた。
0615デフォルトの名無しさん2007/02/05(月) 19:28:07
>596,>600 のプログラムだとワーキングセットが各コアのL1に十分おさまりそうだがな。
0616デフォルトの名無しさん2007/02/05(月) 21:43:29
とすると、
実はsmp対応になってなかっただけ、ってオチがいちばんありそうだな。
0617デフォルトの名無しさん2007/02/06(火) 00:58:28
Haskellわけわかんねぇ

まだ8bitのバイト列の書き出しすらできねぇ
俺様の頭は激しく悪いな


0618デフォルトの名無しさん2007/02/06(火) 01:27:51
つ[fromEnum 'a' => 97]
つ[putStr (map toEnum [104,111,103,101])]
つ[import Bits (.&. .|. xor shiftL shiftR)]
0619デフォルトの名無しさん2007/02/06(火) 01:38:04
>618

サンクス! さんざん苦労してこんなん書いてみたが馬鹿みたいだったな(笑)
頭固くなってしまったものだ‥‥‥ orz

class MessageElement a where
encode :: a->String
decode :: String->a

data MEWord8 = MEWord8 Word8 deriving (Show, Eq, Ord)
instance MessageElement MEWord8 where
encode (MEWord8 w8) = [(chr $ fromInteger $ toInteger w8)]
decode = MEWord8 . toEnum . ord . head

0620デフォルトの名無しさん2007/02/06(火) 09:42:40
キミの頭がわたしの200倍は良いことが判った

さぁVBの仕事してくるか・・・
0621デフォルトの名無しさん2007/02/07(水) 00:37:44
みんな〜 お・ま・ん・こ!

Haskell本二冊がどの本屋でも売れ残っているんだが、どっちがおしゅしゅめ?

ちなみに言語はZ80と6800のマシン語しか知らないよ。もう忘れたけど てへ 
0622デフォルトの名無しさん2007/02/07(水) 01:22:25
目を通してみて特に抵抗を感じないならふつうのHaskellの方がおまんこだと思う。
0623デフォルトの名無しさん2007/02/07(水) 01:36:35
どっちも似たり寄ったりのクズ本だけど、まだふつうのHaskellの方がマシだな。
2冊とも内容的に不十分なので、結局は生の論文を読むしかないと思う。
でも、はっきり言ってHaskellは流行らないと思うよ。
関数型言語の理論的なもとになっているラムダ計算自体が古くさい理論になりつつあるからね。
0624デフォルトの名無しさん2007/02/07(水) 01:39:06
分散計算には向いていると思うんだがなぁ。
データフローとか、今やったらいろいろと面白そうなんだが、
なにせ理論がむつかしい上に自分が手続き型にどっぷり首までつかった
人間なのと、自分の頭が悪いためたいしたことができてない。
0625デフォルトの名無しさん2007/02/07(水) 01:39:21
最近の流行りは? >623
0626デフォルトの名無しさん2007/02/07(水) 02:14:06
C系言語のみに染まっていた俺の脳みそを叩き潰してくれたのはHaskellです
Haskellはいまだに嫌いだけどたまに触ってるしこのスレも見てる
0627デフォルトの名無しさん2007/02/07(水) 02:52:45
>>623
内容が不十分というのは同意するけど、論文嫁というのは訳分からん。
Haskell 98 Reportを読めば十分だろ。
0628デフォルトの名無しさん2007/02/07(水) 03:04:45

俺Haskell使えますよ? とか言いてぇぇぇぇぇぇぇぇ
0629デフォルトの名無しさん2007/02/07(水) 08:55:10
自分ではある程度書けるけど、できる人のコードは読める(読む)気しねえ…

Haskellがはやらなくてよかった
0630デフォルトの名無しさん2007/02/07(水) 09:25:59
python使いな俺としては、perlよりは好き。
0631デフォルトの名無しさん2007/02/07(水) 09:33:27
CとRubyとPythonとPerlの違いなんて微々たるものだろ。無駄に分かれてるだけ。
0632デフォルトの名無しさん2007/02/07(水) 10:29:46
>>631
そんなことをいったらHaskellとCの違いも微々たるものじゃね?
0633デフォルトの名無しさん2007/02/07(水) 11:28:30
PythonはLisp
0634デフォルトの名無しさん2007/02/07(水) 11:55:15
>>627
Haskell98Reportだけでは不十分。
これはC++プログラマがオブジェクト指向の本を読んだりするのと似ている。
0635デフォルトの名無しさん2007/02/07(水) 12:05:23
GHCもHugsも98以降の拡張がガンガン入ってるしねえ。

しかし、λが古くさいって、計算機のパラダイムが根本から変わったなんて話は聞いた事無いんだが…
0636デフォルトの名無しさん2007/02/07(水) 12:18:09
>>635
> GHCもHugsも98以降の拡張がガンガン入ってるしねえ。
だね。最近どんどん使われはじめているアローズに付いての記述もないし。

> しかし、λが古くさいって、計算機のパラダイムが根本から変わったなんて話は聞いた事無いんだが…
たとえば、ラムダ計算だけではシームレスにアクションを定義できないし、並列性についても定義できない。
0637デフォルトの名無しさん2007/02/07(水) 15:56:19
次の仕様改訂はいつなのかな。
0638デフォルトの名無しさん2007/02/07(水) 19:47:39
>>631
Cにはクロージャが無いからそこに並べるのはちょっとキツい
0639デフォルトの名無しさん2007/02/07(水) 21:11:32
Java7で関数型が導入するっぽい動きだけど、その辺ハスケラー的にどうなの?
0640デフォルトの名無しさん2007/02/07(水) 21:14:58
Java9くらいで遅延評価と型推論が導入されたりしないかなー
0641デフォルトの名無しさん2007/02/07(水) 21:46:07
C# 3.0にはlambda式で型推論が一部入るらしい。
0642デフォルトの名無しさん2007/02/07(水) 21:59:54
http://hackage.haskell.org/trac/haskell-prime
0643デフォルトの名無しさん2007/02/07(水) 22:03:29
クラスベースのOOPLでlambdaってすごく取って付けみたいな感じ
0644デフォルトの名無しさん2007/02/07(水) 23:30:43
みんな〜 お・ち・ん・ぽ!

>>622-623 返事ありがとう! お礼にボクのちんぽミルクをお口にあ〜ん。

ふつうのHaskell買って見たよ!アホ用に書かれているので読みやすいにゃん

Lispみたいな言語だにゃ。x:xs は Cons CAR CDR だったのかw

忘れてたけど、漏れ昔Lispを勉強したことがあったんだ。

ただし当時ナイコン族だったので脳内Lisp処理系でしか実行したことがないのだがw

うっひょー
0645デフォルトの名無しさん2007/02/07(水) 23:44:59
ghcの中間語って、今でもSTGなんでしょうか?
0646デフォルトの名無しさん2007/02/09(金) 11:07:05
>ふつうのHaskell買って見たよ!アホ用に書かれているので読みやすいにゃん

そうなの?
0647デフォルトの名無しさん2007/02/09(金) 13:12:55
>>646
やぁ お・ま・ん・こんばんわ 昼だけどw

とりあえず8章まではふんふんと来たが代数的データ型でつまづいた。

モナドは難しいことを避けてくれたので何も説明されてないというかw

Newtype宣言したあと『時が見える』見たいな


ところで P199の

(.)関数の型宣言

(.) :: (b−>c) −> (aー>b) −> (a−>c)
凡例 f.g

の順序はこれでいいの隗?
第一引数がgで第二引数がfになるのけ?
■ このスレッドは過去ログ倉庫に格納されています