関数型プログラミング言語Haskell Part20
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/10/17(水) 08:08:28.97ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
0331デフォルトの名無しさん
2012/11/09(金) 19:22:04.750332デフォルトの名無しさん
2012/11/09(金) 19:22:21.31今入力待ちで暇だなー……
あ、もう要らない領域あんじゃん
スカベンジスカベンジ……
こうはならないの?
0333デフォルトの名無しさん
2012/11/09(金) 19:23:42.68あり^^
0334デフォルトの名無しさん
2012/11/09(金) 21:15:13.21これって需要あるの?
{-# LANGUAGE TransformListComp #-}
import GHC.Exts (groupWith)
xs = [1,3,4,5,7,9,10,11,13]
ys = [x | (x,y) <- zip xs [1..], then group by x-y using groupWith]
0335デフォルトの名無しさん
2012/11/11(日) 15:48:20.65ライブラリドキュメントの Data.Conduit にチュートリアルがありますが、
sourceList [1..10] $$ fold (+) 0 これの結果がどうなるか調べる方法を探しています。
チュートリアルでは、恐らく ghci 上で上記の式を評価して、
55 という数字が標準出力に出力されている様子が描かれていると思いますが、
私は Windows で GHC 7.6.1 を使っているため、ghci で conduit が使えません。
試しに次のようにしてみても、コンパイルエラーが出ます。
a :: GSink Int IO Int
a = sourceList [1..10] $$ fold (+) 0
main :: IO ()
main = print a
--------------------------------
No instance for (Show (Pipe l0 Int o0 u0 IO Int))
arising from a use of `print'
--------------------------------
どうすればチュートリアルのように
sourceList [1..10] $$ fold (+) 0 の評価結果を数値または数字で得る、
あるいは標準出力へ出力することができるでしょうか。
0336355
2012/11/11(日) 16:02:03.19これでできました。
a :: GSink () IO Int
a = sourceList [1..10] $$ fold (+) 0
main :: IO ()
main = do
a <- runPipe a
print a
なんか不親切なチュートリアルですね。
最初の sourceFile の例ではちゃんと runResourceT があるのに。
0338デフォルトの名無しさん
2012/11/11(日) 18:20:04.170339デフォルトの名無しさん
2012/11/11(日) 18:25:43.15それよりWindowsのghc7.6.1ではghci上でconduitが使えないというのが気になる
0340デフォルトの名無しさん
2012/11/11(日) 18:53:17.01>>289 >>290 >>293 辺り
0341デフォルトの名無しさん
2012/11/11(日) 19:02:24.587日に 0.5.4 が公開されていたんですね(その前日にDLしてました)
今 0.5.4.1 にアップデートして、
sourceList [1..10] $$ fold (+) 0 の値を print してみましたが、
コンパイルエラーでした。
大丈夫だったというのは、どのようにやったのでしょうか。
0342デフォルトの名無しさん
2012/11/11(日) 19:07:49.53大域的な型推論
直和型が簡単に表現できる(CのunionやOOPLのsubtypeと比べて)
パターンマッチ(網羅性チェック、分岐と値の取り出しを同時に行える、など)
副作用のある箇所が型により分離される
(LLとかよりは)実行速度が速い
0343デフォルトの名無しさん
2012/11/11(日) 19:10:49.180344341
2012/11/11(日) 19:11:52.88あぁ、分かりました。
(sourceList [1..10] $$ fold (+) 0) >> print
こういう事ですね。
これならできました。
もしかして、これならアップデートしなくてもできていたかも知れません。
ところで、conduit を 0.5.2.7 から 0.5.4.1 へ
"cabal install conduit" でアップデートしたのですが、
ライブラリドキュメントの方はこれでは更新されないのでしょうか。
(デフォルトなら ・・・/AppData/Roaming/cabal/doc/index.html
にインストールされるものです)
ドキュメントの表記の方は 0.5.2.7 のままなんです。
0345341
2012/11/11(日) 19:18:31.91誤 (sourceList [1..10] $$ fold (+) 0) >> print
正 (sourceList [1..10] $$ fold (+) 0) >>= print
ライブラリドキュメントの方はトップの目次のところだけでなく、
内容も、例えば Data.Conduit のページの上部にも
"conduit-0.5.2.7: Streaming data processing library."
と書かれていて、更新されていません。
こういうものなのでしょうか。
Cabal のパッケージのバージョンは、
(規則に従うなら)4つ目の番号の変更は、
互換性は保っているがAPIが変更されている事になるので、
ドキュメントも変更しないとまずいような気がするのですが・・・
0346デフォルトの名無しさん
2012/11/11(日) 20:02:42.53λ> sourceList [1..10] $$ fold (+) 0
って入力しただけだけど 省略 >>= printと同じ事か
ドキュメンテーションが更新されないのは多分haddockのバージョンとghcのバージョンが違うから生成に失敗してるとかが考えられる
0347341
2012/11/11(日) 20:46:24.73> 省略 >>= printと同じ事か
なるほど、たしかに。
> 多分haddockのバージョンとghcのバージョンが違うから
haddock.exe は ghc 7.6.1 に元々入っているのですが、
これが違うという事でしょうか。
ちなみに、ghc の bin ディレクトリには haddock.exe とは別に、
haddock-7.6.1 という名前の謎のファイルもあります。
(バイナリエディタで見てみると、形は実行ファイルの様ですが)
どうも、ghc 7.6.1 は謎の挙動かちらほらとありますね・・・
0348デフォルトの名無しさん
2012/11/11(日) 22:43:59.93cabal install haddockで入れなおしたらconduitのドキュメント作ってくれるようになった
これはcabal/binにhaddockがあるからそっちが優先されるのが原因だけど
0349デフォルトの名無しさん
2012/11/12(月) 02:11:31.23Javaのような言語で書かれた業務アプリ、ドカタの世界にもこれから進出してきたりしますかね
0350デフォルトの名無しさん
2012/11/12(月) 06:17:52.78早くて20年後ぐらいじゃね?
0351デフォルトの名無しさん
2012/11/12(月) 20:15:17.94ハードについてるドライバは何度かある
0352デフォルトの名無しさん
2012/11/12(月) 20:22:24.00俺はひとつだけ知ってる
astah*
Haskell で書かれた商用ソフトってあるんかな
うちは社内ツールではあるけど
0353デフォルトの名無しさん
2012/11/12(月) 20:29:59.560354デフォルトの名無しさん
2012/11/12(月) 20:33:15.190355デフォルトの名無しさん
2012/11/12(月) 20:37:06.130356デフォルトの名無しさん
2012/11/12(月) 20:43:17.14という認識でいいのか?
0357341
2012/11/12(月) 22:44:21.87Haddock を cabal install で入れてから、
cabal install --reinstall Conduit してもダメでした。
(ghc\bin ディレクトリより cabal\bin ディレクトリの方が
優先的に検索されるように設定しましたが・・・)
cabal\bin の Haddock.exe を ghc\bin へコピーしてみましたがダメでした。
よく見たら、cabal\doc 内には conduit-0.5.2.7 と conduit-0.5.4.1 があったので、
conduit-0.5.2.7 の方を適当にリネームして、index.html もリネームし、
この状態で cabal install --reinstall Conduit してみたら、
ドキュメントの目次やコンテンツの Conduit のバージョンが
ちゃんと 0.5.2.7 に更新されました。
Haddock の更新は必要条件だったのかよく分かりませんが、
とりかくドキュメントが正しく更新できて良かったです。
お騒がせしました。
0358デフォルトの名無しさん
2012/11/13(火) 20:32:21.56Minecraft
0359デフォルトの名無しさん
2012/11/14(水) 13:53:30.81type family Mutable v :: * -> * -> *
Mutable v s a is the mutable version of the pure vector type v a with the state token s
って
リワハじゃ習わなかったぞ
0360デフォルトの名無しさん
2012/11/14(水) 15:21:27.75Unbox a => ……としたとして
letやwhereと続けた内部関数にも型宣言をつけるとします
このとき、その宣言でもトップレベルの a と同じ型を指定する為にはどうしますか?
0361デフォルトの名無しさん
2012/11/14(水) 18:30:25.04トップレベル関数 = 関数を生成する関数 内部関数 where 内部関数 = …
0362デフォルトの名無しさん
2012/11/14(水) 19:30:01.00Lexically scoped type variables の事かな
0363デフォルトの名無しさん
2012/11/19(月) 07:06:57.78whereって必要ですか?
0364デフォルトの名無しさん
2012/11/19(月) 07:07:41.130365デフォルトの名無しさん
2012/11/19(月) 07:37:36.320366デフォルトの名無しさん
2012/11/19(月) 08:06:27.68トップレベルの関数に持ち上げてしまって、モジュールの機能で外部からは隠して、
自由変数になっていたところは明示的に引数として渡すほうが良いのではないかと
0367デフォルトの名無しさん
2012/11/19(月) 08:09:12.81whereが要る要らないの話にはならないと思う
0368デフォルトの名無しさん
2012/11/19(月) 08:13:31.560369デフォルトの名無しさん
2012/11/19(月) 18:06:19.91多くの人はwhereを大量に使うことを選択している
何を読み難いと感じるかは個人差が大きいから、
多数派と違う感性を持ってると生きづらいね
という結論が嫌なら、「読みやすく感じる」よりも客観的な論拠を挙げてください
0370デフォルトの名無しさん
2012/11/20(火) 00:03:10.08whereはプログラムを書きやすくできるが読みにくくする
whereを使うのは甘え
0371デフォルトの名無しさん
2012/11/20(火) 06:58:26.14関数内のスコープに限定するより
モジュール内スコープに広げた方が読みやすい?
頭大丈夫?
0372デフォルトの名無しさん
2012/11/20(火) 07:07:32.45頭の中で、読みにくいコードを読みやすいコードに書きかえればいいだろ
それができる人は読むことより書くことが多い
0373デフォルトの名無しさん
2012/11/20(火) 07:38:40.46末尾再帰覚えてない人かな?
where使わず書いたら、引数の数が違うだけで同じ機能の関数が沢山出来上がってしまう
sum ns = sum' ns 0
where
sum' [] v = v
sum' (n:ns) v = sum' ns (n + v)
whereが無ければsum関数とsum'関数の両方が関数を使う側に公開されるか、末尾再帰関数作る度にモジュール書き換えが必要になる
0374デフォルトの名無しさん
2012/11/20(火) 08:10:24.50sum' (n:ns) v = sum' ns (n + v)
in sum' ns 0
0375デフォルトの名無しさん
2012/11/20(火) 09:16:11.00君、仕事でプログラム書いたことないでしょ?
0376デフォルトの名無しさん
2012/11/20(火) 09:29:43.91ノイズが少ない方が優れているといってノイズばかり見ている
雑音を無視したら優劣の概念がなくなってしまう
優劣を気にするとデジタルが読めなくなる
0377デフォルトの名無しさん
2012/11/20(火) 09:57:34.350378デフォルトの名無しさん
2012/11/20(火) 14:25:22.30自分で作ったサービスで始める仕事(ビジネス)だったら、言語はなんだっていいんだよ。
ドヤ顔で「仕事でhaskell使ったことないわ」とか恥ずかしすぎるわw
0379デフォルトの名無しさん
2012/11/20(火) 14:26:08.120380デフォルトの名無しさん
2012/11/20(火) 14:45:50.000381デフォルトの名無しさん
2012/11/20(火) 15:35:16.080382デフォルトの名無しさん
2012/11/20(火) 16:26:57.230383デフォルトの名無しさん
2012/11/20(火) 18:16:34.72トップレベルにリフトすれば自由変数が減るかのような錯覚はどこからきた?
0384デフォルトの名無しさん
2012/11/20(火) 18:21:28.910385デフォルトの名無しさん
2012/11/20(火) 18:30:03.160386デフォルトの名無しさん
2012/11/20(火) 18:49:25.200387デフォルトの名無しさん
2012/11/20(火) 22:50:08.770388デフォルトの名無しさん
2012/11/20(火) 23:02:02.530389デフォルトの名無しさん
2012/11/21(水) 01:14:53.06大学
0390デフォルトの名無しさん
2012/11/21(水) 07:23:50.52実際にどのような仕事があるか知らんが、
君には "haskell commercial OR industry" でググる知恵はないのか
0391デフォルトの名無しさん
2012/11/21(水) 09:17:06.660392デフォルトの名無しさん
2012/11/22(木) 02:43:01.30自分で始めればいいだけだろ。
仕事を作るのも仕事のうち。
0393デフォルトの名無しさん
2012/11/22(木) 06:04:12.01一つの生き方ではあるわな
0394デフォルトの名無しさん
2012/11/22(木) 07:38:46.45いや、維持保守を引き継ぐ人たちがHaskell使えないのに
Haskellのソースを残すわけには行かないだろ。
0395デフォルトの名無しさん
2012/11/22(木) 09:54:55.620396デフォルトの名無しさん
2012/11/22(木) 13:58:22.73本当に知らなくていい事なのかを考えもしない手合いは厄介だけどな。
0397デフォルトの名無しさん
2012/11/22(木) 13:59:26.23いやそこはPHPで。
0398デフォルトの名無しさん
2012/11/22(木) 14:55:22.060399デフォルトの名無しさん
2012/11/22(木) 16:17:40.42仕事にHaskellを使う事の利点を、アピール出来なけれぱそうなるな。
0400デフォルトの名無しさん
2012/11/22(木) 17:23:28.24あるよ。金融系で実稼働している。
0401デフォルトの名無しさん
2012/11/22(木) 17:29:09.330402デフォルトの名無しさん
2012/11/22(木) 21:09:50.14そんなに仕事がしたけりゃJavaでも書いてればいいじゃん
0403デフォルトの名無しさん
2012/11/22(木) 21:32:01.160404デフォルトの名無しさん
2012/11/22(木) 21:35:32.480405デフォルトの名無しさん
2012/11/22(木) 21:49:49.04最も洗練されているライブラリは何でしょう?
やはり今も昔も haskelldb が一歩先を行く感じでしょうか。
0406デフォルトの名無しさん
2012/11/22(木) 23:28:04.06これを次のいずれかのような型にしたい
f : (Monad m) => (a -> m Bool) -> [a] -> m ([a], [a])
f : (Monad m) => (a -> m Bool) -> m [a] -> m ([a], [a])
どちらでもいいのですが、スクラッチビルドすることなく、
どうにか元の partition を使って f を作れないでしょうか。
[FilePath] を System.Directory.doesDirectoryExist と partition を使って
ディレクトリとそれ以外のものに分けたい、というのが動機です。
ちなみに、Control.Monad.liftM2 partition だと、
Monad m => m (a -> Bool) -> m [a] -> m ([a], [a]) という型になって、
これでは目的を果たせませんでした。
0407デフォルトの名無しさん
2012/11/23(金) 00:12:37.96f pred xs = do{
rs <- mapM pred xs;
let (ys, zs) = partition snd (zip xs rs);
return (map fst ys, map fst zs);
}
なら目的は果たせそう
0408デフォルトの名無しさん
2012/11/23(金) 00:16:47.55filterM なら存在するけど partitionM はないんだよな
0409デフォルトの名無しさん
2012/11/23(金) 01:03:35.060410デフォルトの名無しさん
2012/11/23(金) 02:09:12.090411デフォルトの名無しさん
2012/11/23(金) 03:47:23.41保守?
お前の仕事はそれしかないのか?
>>395
納品?
twitterやfacebookあるいはwindowsみたいに
自分でアイデアを実現して商売始めてやろうという気概や野望はないのか?
0412デフォルトの名無しさん
2012/11/23(金) 03:48:46.49haskellは受注開発向きじゃないんだから。
0413デフォルトの名無しさん
2012/11/23(金) 03:51:13.240414デフォルトの名無しさん
2012/11/23(金) 06:10:46.560415デフォルトの名無しさん
2012/11/23(金) 07:01:49.960416デフォルトの名無しさん
2012/11/23(金) 07:02:55.060417デフォルトの名無しさん
2012/11/23(金) 07:05:51.480418デフォルトの名無しさん
2012/11/23(金) 07:24:06.230419デフォルトの名無しさん
2012/11/23(金) 07:27:39.44http://www.haskell.org/pipermail/haskell/2012-November/023566.html
Haskell終わったな
0420デフォルトの名無しさん
2012/11/23(金) 07:50:59.95始まってすらない
0421デフォルトの名無しさん
2012/11/23(金) 08:10:32.640422デフォルトの名無しさん
2012/11/23(金) 08:50:34.460423デフォルトの名無しさん
2012/11/23(金) 09:07:05.42いかにも○○(言語)が最強とか言っちゃいそうなタイプだな
学生に多い
0424デフォルトの名無しさん
2012/11/23(金) 09:10:58.51底辺ドカタが言語を語るなんて滑稽。君達に選択権は無い。
0425デフォルトの名無しさん
2012/11/23(金) 09:27:27.860426デフォルトの名無しさん
2012/11/23(金) 09:40:17.120427デフォルトの名無しさん
2012/11/23(金) 09:45:53.79社畜よ、これが安全だ
0428デフォルトの名無しさん
2012/11/23(金) 09:55:47.010429デフォルトの名無しさん
2012/11/23(金) 10:02:35.08残念。趣味では好きな言語を選択して楽しんじゃってまーすw
ベロベロバーw
0430デフォルトの名無しさん
2012/11/23(金) 10:04:06.15■ このスレッドは過去ログ倉庫に格納されています