1 名前:デフォルトの名無しさん [04/02/10 22:16] Haskellの公式HP www.haskell.org/ 日本語サイト www.sampou.org/cgi-bin/haskell.cgi www.teu.ac.jp/kougi/koshida/Prog6/index.html 過去ログ、関連スレは>>2-5
577 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 02:24:06 ] >>571 >CharやIntの値がくるまれたカプセルみたいなもんだ。 俺にはこの表現がなじまない。 カプセルってのは中身が取り出せてこそのものだよな。 だから、「CharやIntにに関係する何か」くらいの認識しかできない。
578 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 12:13:59 ] 自分でIO型の関数作れば 前のIO関数から>>=で渡された 中身の生の値をちゃんと自由に扱える。 「取り出す方法が無い」んじゃなくて 「>>=を使って(間接的に)取り出すしか方法が無い」が 正しいかも。
579 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 12:15:56 ] monadic I/Oの意味論を破壊して喜ぶって、マゾですか?
580 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 12:16:44 ] そーゆーのには、 C言語とアセンブラがお勧め(w
581 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 12:30:25 ] >576 ワロス 俺も思いついた
582 名前:デフォルトの名無しさん [2005/05/21(土) 16:33:47 ] もな〜ももなど?
583 名前:デフォルトの名無しさん [2005/05/21(土) 20:30:44 ] >>549 そのとおりだよね。
584 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 20:44:49 ] >>583 だからー、 その件はLISPマクロのようには書けないって話だろーが
585 名前:デフォルトの名無しさん [2005/05/21(土) 21:04:10 ] >>559 名前渡し?遅延評価ってそういうことなのでは?
586 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 21:12:59 ] 名前をキーワードとして扱う?CLtL4の仕様ですか?w
587 名前:566 mailto:sage [2005/05/21(土) 21:23:20 ] 某バイナリファイルのヘッダ構造体の読み込み関数が だいたい目処がたってきますた。 ところでdata宣言で作った構造体?にたいする Javaのシリアライズみたいな仕組みやライブラリって Haskellにはないんすかね? リフレクションみたいな仕組みがないと無理? ファイルフォーマットをリストで与えて結果もリストで返すみたいなのは できそうだけどそれじゃせっかくの強力な型システムが活かせないような、、
588 名前:デフォルトの名無しさん [2005/05/21(土) 21:25:51 ] >>585 あ、違うか 名前渡してないもんね 普通の意味の値の他に名前も値にできるようでないと圏論的には不完全なようなキガス
589 名前:デフォルトの名無しさん [2005/05/21(土) 21:28:21 ] とゆーことは変数のポインタでいいのかどうか
590 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 21:39:32 ] >圏論的には不完全 というと?
591 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 16:51:02 ] ちょっと質問です。 二項関係 r の反射的・対称的・推移的閉包に (x,y) が属するかどうかを判定する関数 inEqvCl ってのを書いてみたんですけど、もうちょっとすっきりした書き方とかないでしょうか? inEqvCl :: Eq a => (a,a) -> [(a,a)] -> Bool inEqvCl _ [] = False inEqvCl (x,y) s = chk s y x where chk lst v u | v == u = True | v `elem` ux = True | otherwise = or $ map (chk lst' v) ux where lst' = [ p | p <- lst, u /= fst p, u /= snd p ] ux = do p <- lst if u == fst p && u /= snd p then return $ snd p else if u == snd p && u /= fst p then return $ fst p else fail "" 実行例 (2,1) `inEqvCl` [(0,2),(3,4),(5,4),(1,5),(5,0),(6,7),(8,7)] => True (1,6) `inEqvCl` [(0,2),(3,4),(5,4),(1,5),(5,0),(6,7),(8,7)] => False
592 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 21:57:54 ] >>591 こんなのでどうかな。 題意を理解していないので間違ってたらスマソ import List inEqvCl :: Eq a => (a, a) -> [(a, a)] -> Bool inEqvCl _ [] = False inEqvCl (x, y) s | x == y = True | y `elem` ns = True | otherwise = any con ns where ns = map snd $ filter ((==x) . fst) exts exts = s ++ map (uncurry $ flip (,)) s con n = inEqvCl (n, y) (s\\[(x, n), (n, x)])
593 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:23:13 ] 面白そうなのでオレもやってみた。 -- 同値類のリストを算出 classify :: Eq a => (a, a) -> [[a]] -> [[a]] classify (x, y) [] = [[x, y]] classify (x, y) (c : cs) | x `elem` c = (y : c) : cs | y `elem` c = (x : c) : cs | otherwise = c : classify (x, y) cs inEqvCl :: Eq a => (a, a) -> [(a, a)] -> Bool inEqvCl (x, y) lis = (not . null) (filter (f x y) (foldr classify [] lis)) where f x y c = x `elem` c && y `elem` c いろいろ最適化の余地があるが。
594 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 22:32:57 ] あ、>>593 間違ってるわ。これだと [(3, 4), (1, 3), (2, 4)] とかで うまくいかない。
595 名前:591 mailto:sage [2005/05/22(日) 22:42:11 ] >>592-594 ありがとうございます。 やっぱり短く書けるんですね。
596 名前:デフォルトの名無しさん [2005/05/23(月) 22:10:44 ] 無限のリストだと止まらなくなるかな
597 名前:シミュレーション板GPスレから来ました [2005/05/24(火) 01:12:59 ] PolyGP: A Polymorphic Genetic Programming System in Haskell ↑のプログラムソース PolyGP.tar って、uclのサイトから消えている様ですが、 どこかにバックアップないでしょうか? よろしく、おながいします。
598 名前:591 mailto:sage [2005/05/24(火) 05:44:25 ] とりあえず問題が2つありました。 1. 反射的閉包なんで、inEqvCl (x,x) [] == Trueにならないといけない。 >>592 さんのからinEqvCl _ [] = Falseを取り除けばOK。 2. (\\)は最初の1つしか取り除かないので、最初の集合に対称なものがあると拙い。 (\\)の代わりに下の(//)を使って対処。 (//) :: Eq a => [a] -> [a] -> [a] xs // ys = [ x | x <- xs, x `notElem` ys ] >>596 無限リストは今回は対象外なので問題ないです。(^^;
599 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 00:42:11 ] Haskellの配列の更新(//)は一部変更でも配列全部作り直したり してるんですか? リングバッファとかに使っても大丈夫ですか?
600 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 01:42:54 ] 600
601 名前:599 mailto:sage [2005/05/27(金) 22:02:30 ] >>599 自己レス ttp://d.hatena.ne.jp/tanakh/20040809#p1 ここみるとだめっぽい感じでした GCが仕事してくれること期待して 配列ガシガシ使い捨てにでもするか
602 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 22:21:03 ] いつまでたっても関数型のボトルネックだな>配列・構造体 これが解決しない限り関数型が栄えることは無い
603 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 22:21:57 ] 俺達でwadlerを唸らせる解を考えよう
604 名前:デフォルトの名無しさん [2005/05/28(土) 01:00:55 ] 配列も、マクロな視点で見ればただの変数に変わりない だから、修正された瞬間複製するのが妥当な戦略だろう しかし、オリジナルが参照されないとわかっているなら複製する必要ないから複製を省略する。 ここまで考えてふと思いついた。 すなわち差分をもっとけばいいんじゃないかと。 配列n番目更新しますた!更新しますた!という情報を各インデクス毎に持っとくわけよ 配列を全て更新しおわたとしても、またさらに更新するかもしれない その場合はまたその差分を作るわけよ するとどうだい? 差分として分解された各配列の要素はまるでりすt(ry おれには難しすぎたようだ!
605 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 01:13:09 ] >>602 Uniqueness Typing
606 名前:デフォルトの名無しさん [2005/05/28(土) 05:03:54 ] 配列や構造体もモナドにしたら?
607 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 08:38:44 ] starray とかいうモナドがあると聞いたが 漏れは調べてないので諸君調べて報告してくれ
608 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 11:15:19 ] マクド
609 名前:デフォルトの名無しさん mailto:sage [2005/05/28(土) 13:50:31 ] >>606 つIOUArray
610 名前:デフォルトの名無しさん [2005/05/28(土) 14:11:18 ] 伝説のモナド
611 名前:デフォルトの名無しさん [2005/05/28(土) 14:23:54 ] ナボナ@亀屋万年堂 www.navona.co.jp/ これのことでしょ?
612 名前:デフォルトの名無しさん [2005/05/28(土) 20:20:45 ] >>607 それはスタレイました
613 名前:デフォルトの名無しさん [2005/05/28(土) 20:52:42 ] >>28 で紹介されているrrr.jin.gr.jp/ のRWikiがNot Foundで見れません。 どうしたらよかとですか?
614 名前:613 mailto:sage [2005/05/28(土) 20:54:47 ] 自己解決しました。 ://pub.cozmixng.org/~the-rwiki/rw-cgi.rb にありました。
615 名前:デフォルトの名無しさん [2005/05/30(月) 20:59:12 ] ハスケルを勉強したい時にはどうしたらいいですか? 日本語の丁寧なチュートリアル文献がありますか? >>1 のは難しいですよ
616 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 21:15:20 ] >>615 1. haskellで適当なコードを書く 2. -ddump-realCをつけてコンパイル 3. 1と2の結果を見比べる
617 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 21:46:39 ] >>615 ttp://www.geocities.jp/shido_takafumi/hs/index_hs.html とか。
618 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:05:26 ] >>616 これなかなか良いね。
619 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:21:34 ] >>615 www.sampou.org/cgi-bin/haskell.cgi?Programming%3aWayToHaskeller&l=jp とかはどう?
620 名前:デフォルトの名無しさん mailto:sage [2005/05/30(月) 22:29:19 ] >>616 Cに落とさなくてもcore言語レベルでいいんじゃない?
621 名前:デフォルトの名無しさん [2005/05/31(火) 09:34:43 ] mona do !
622 名前:デフォルトの名無しさん [2005/06/02(木) 00:38:18 ] monadius
623 名前:sage [2005/06/02(木) 14:55:24 ] Hugsなんだけど Main> -1 ってやると -1 Main> ( - 1) 2 とやると ERROR - Unresolved overloading *** Type : (Num a, Num (a -> b)) => b *** Expression : fromInt (-1) 2 んん?(-) は単項演算子なのか!? しかしMain> ( - ) 1 2 とやると -1 とかえってくる。 (-)は二項演算子ってことになってるんじゃなかったのか!? www.sampou.org/haskell/tutorial-j/numbers.html >negate は Haskell では唯一採用された前置演算子です。 >これを (-) と書くことはできません。 >それは、こう書けば、減算関数になってしまうからです。 どうなってるの?>識者の方々
624 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 15:56:22 ] -1 (- 1) (- 1) 2 の - はnegateのことで単項演算子 (-) 1 2 ((-) 1) 2 (1 -) 2 1 - 2 の - は二項演算子
625 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 17:54:00 ] >>624 それって上の引用の記述と矛盾してないかって事。 HugsはHaskell98モードでも再現したよ。 上の記述が古いのかHugsの独自仕様なのか、、、 実際-1と書けたほうが便利だけどね。 一瞬 「(\x -> x - 1) を 自動的に -1 に変換してるのかHaskell凄えな」 と思ったけど 型が全然違うし。
626 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 19:21:51 ] 括弧のついてない - はその直前に第1引数になるものがなければ単項演算子として解釈されるってだけなんじゃないの。
627 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 20:15:18 ] >>623 原文は >negate is the function applied by Haskell's only prefix operator, minus; we can't call it (-), because ... だから、誤訳かと。 一応報告しておいた。
628 名前:デフォルトの名無しさん [2005/06/02(木) 23:01:09 ] >>625 >それって上の引用の記述と矛盾してないかって事。 どこが?
629 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 23:12:15 ] 誤訳なのか? "minus"が抜け落ちてるけど大意は変わらない気がするが。 単にセクションと単項のマイナスが構文上区別できなくて、その場合は単項マイナスの方を優先するってだけの話じゃん。 www.sampou.org/haskell/report-j/exps.html#sections より > - は文法上、特別扱いで、(- exp) はセクションではなく、前節で説明したように前置の符号反転演算子の適用である。
630 名前:623 mailto:sage [2005/06/02(木) 23:25:28 ] 誤訳か誤読かはともかく納得しますた。 これから安心して-1って書けるよ
631 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 23:27:07 ] 最近すげぇ低レベルの話題ばっかなのは、 やっぱ新入生??
632 名前:デフォルトの名無しさん mailto:sage [2005/06/02(木) 23:31:21 ] ヒント:ネタ切れ
633 名前:623 mailto:sage [2005/06/03(金) 01:25:03 ] レベル低くてゴメンよ 配列の更新についてネタ振ったのも自分 学生じゃないけど 最近Haskellに挑戦してるのさ 初心に帰って楽しい。 ところでソースアップできるところないすか
634 名前:デフォルトの名無しさん mailto:sage [2005/06/03(金) 01:35:40 ] >>629 >>623 の表現だと単項マイナスが存在しないように読めるから、誤訳といっていいと思う。
635 名前:デフォルトの名無しさん [2005/06/04(土) 14:08:09 ] 33 名前: 名無しさん@毎日が日曜日 Mail: 投稿日: 05/06/03 21:46:40 ID: M3Iswrux type Dame = Human jobHunting :: Dame -> [Company] -> Maybe Future jobHunting _ [] = Nothing jobHunting d (c:cs) | hasShokureki d = Just Saiyou | (age d) < 25 = Just Saiyou | otherwise = jobHunting d cs
636 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 18:42:44 ] >>602 そんな貴方に APLやJやKはいかが? 関数型言語スレで話題になってたと思うが、過去ログ倉庫入りかも。
637 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 21:35:16 ] APLやJやKは、関数型言語の源流というだけで、今更な言語。 APL挙げるくらいなら、KRCやFを挙げるよな、まともな人間なら。
638 名前:デフォルトの名無しさん [2005/06/04(土) 21:56:08 ] Lisp -> ML -> Haskell ってながれじゃないの?
639 名前:デフォルトの名無しさん mailto:sage [2005/06/04(土) 22:13:17 ] ? 現在の関数型言語ブームの源流は、 Fortran、BNF、1977年チューリング賞受賞者John BackusのFL(F言語) で す が 何 か ?
640 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 03:19:55 ] い い え 何 も ?
641 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 04:13:34 ] C++ → くそ C → くそ Java → くそ Fortran → くそ ML → ゴミ Haskell → ゴミ Ocaml → クズ Ruby → クズ Lisp → クズ Forth → クズ λ-Cal → アホ π-Cal → アホ μ-Cal → アホ φ-Cal → アホ
642 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 04:14:31 ] コピペうざ
643 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 04:24:33 ] >>637 関数型言語の源流というよりは、配列計算言語の源流でわ? SとかRとか(SASとかSPSSとか)、影響うけてるでそ?
644 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 09:50:00 ] >>現在の関数型言語ブーム え、今、ブ、ブームなんですか...... よい時代に生まれたことを感謝します。
645 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 10:06:10 ] 空前のブームのため、Haskellプログラマは企業から引っ張りだこです。
646 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 10:17:20 ] >>645 / ̄ ̄ ̄ ̄ ̄ ミ / ,――――-ミ / / / \ | | / ,(・) (・) | (6 つ | | ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | /__/ / < なわけねーだろ!! /| /\ \__________
647 名前:623 mailto:sage [2005/06/05(日) 16:30:18 ] とりあえずLha展開関数動いたよ。 www3.atwiki.jp/nanakoso/pages/4.html だれかモナドを2つ以上同時に使う方法教えて下さい。
648 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 16:56:31 ] >>647 モナド変換子で合ってる。
649 名前:623 mailto:sage [2005/06/06(月) 01:12:37 ] www.sampou.org/haskell/a-a-monads/html/transformers.html やっぱりこの辺りは避けて通れませんか。 モナドをやっつけたと思ったらまた難物が、、、
650 名前:デフォルトの名無しさん [2005/06/06(月) 23:25:48 ] ええっと、haskellよりmathematicaの方が有能だしいいのでは関数型として?
651 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 23:33:24 ] 放置。
652 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 05:06:03 ] Haskellで数式処理システム作ろう!とかいう噺があったやうな…?
653 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 05:44:29 ] >>649 こんどはCIAか?
654 名前:デフォルトの名無しさん mailto:sage [2005/06/07(火) 22:43:11 ] いや、FBIです
655 名前:デフォルトの名無しさん [2005/06/10(金) 17:09:38 ] 649>>haskell.org/hawiki/MonadTransformers に簡単なつかいかたとかあるよ。がんばれ!
656 名前:デフォルトの名無しさん [2005/06/29(水) 17:18:46 ] WinXPにHugsを導入したんですけど、読み込みまでは行くみたいなんですけど 実行してみると結果が表示されません。 例えば myfactorial :: Int -> Int myfactorial n | n == 0 = 1 | otherwise = n * myfactorial (n-1) というファイルを読み込んで myfactorial 5 と入力しても何も結果が表示されずに Main> という状態に戻ってしまいます。何か原因があるのでしょうか。
657 名前:¬656 mailto:sage [2005/06/29(水) 22:55:14 ] XPでやってみたところ、GUIのやつ(WinHugs)が駄目なようです。 オプションあたりが怪しいけどサパーリ
658 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 22:20:14 ] ghcでControl.Monad.Readerをインポートすると Monad ((->) r)のインスタンス宣言(中味はReaderと同じ)が 付いてくるっぽいんだが、いったいこれは何なんだ? かなり便利だから積極的に使いたい気もするけど、 ドキュメントされてないみたいだし。 import Control.Monad.Reader -- 3で割れて、かつ5で割れない自然数 t = filter (liftM2 (&&) ((==0) . (`mod`3)) ((/=0) . (`mod`5))) [0..]
659 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 23:50:56 ] Vital 使ってる人居ます? www.cs.kent.ac.uk/projects/vital/
660 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 19:53:36 ] I/Oをマクロは解決しないか
661 名前:デフォルトの名無しさん [2005/07/11(月) 23:39:29 ] FpLの抽象構文を拡張して、利用者定義関数が算術式と論理式とを混在してとることができるようにするにはどうすればよろしいですか?評価意味論を適当に拡張するらしいのですが・・・
662 名前:デフォルトの名無しさん [2005/07/11(月) 23:40:00 ] 名前呼びを用いると、ある式eに対してD,ρ├ e ⇒ A kとなる数字kが存在するけれども、値呼びを用いると、D,ρ├ e ⇒ A kとなる数字が存在しない宣言の例ってありますか?
663 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 07:34:27 ] まず元ねたを書け。話はそれから。
664 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 18:29:38 ] 圏論の基礎 日本語訳 S.マックレーン www.amazon.co.jp/exec/obidos/ASIN/4431708723/qid=1121765296/sr=8-1/ref=sr_8_xs_ap_i1_xgl/250-1176990-6892214
665 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 20:19:44 ] "Catefories for Working Mathematician" (働く数学屋のための圏論) の題名が 「圏論の基礎」になっちまうんだとしたら、 "Categories, Types, and Structures: An Introduction to Category Theory for the Working Computer Scientist (Foundations of Computing Series)" の題名はどーなるんだ? 「一週間で判る!くもんしきけんろん (いちねんせいむけ)」か(笑
666 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 20:31:23 ] >>664 買っちゃった。
667 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 20:43:25 ] >>666 でどうよ? >>665 "Basic Category Theory for Computer Scientists (Foundations of Computing)" 「圏論の超基礎」つうのもある・・・
668 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 20:47:40 ] "Categorical Logic and Type Theory (Studies in Logic and the Foundations of Mathematics)" 「論理&数学ラブ♥な人のための、カテゴリー・ロジックと型理論」 なんつう分厚い数学書も買うには買ったけど、これは完全に死蔵本だな、たぶん。
669 名前:デフォルトの名無しさん [2005/07/19(火) 20:49:10 ] ってな意味で、いきなり訳書を読めるアンタ(>>666 )、 幸せ者だぞゴラァ!!!
670 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 21:17:36 ] >>667 誤植が多いみたい。
671 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 22:24:11 ] 誤訳じゃなくて誤植ってのが泣けるね。
672 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 23:39:47 ] 「できる圏論」
673 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 23:40:57 ] モノイダル圏とか分からない件
674 名前:デフォルトの名無しさん [2005/07/21(木) 16:22:11 ] www.sampou.org/haskell/tutorial-j/goodies.html 暇だからこれ読んでたんだが、ユーザ定義型のデータ構築子と型構築子の意味が分らん。 誰かなんかC,C++の似たような概念の用語で分りやすい説明キボンヌ。
675 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 18:51:43 ] データ構築子 <=> classのコンストラクタ 型構築子 <=> template
676 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 21:21:07 ] 型構築子はtypedefでは?
677 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 21:34:50 ] typedef は多相(総称?)型の定義ができんでしょ。