関数型プログラミング言語Haskell Part31©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/ foldl f a . reverse → foldr (flip f) a
みたいなルールはあってもいいかもね
reverse = foldl (flip (:)) [] だから
reverse . reverse == foldr (:) [] == id
後者の変換はghc標準でflipは簡約で消えると思う pezyは嘘ついて補助金だまし取って、一部を私的に流用したから逮捕されたのに、
まるで開発が計画通り進まなかったから逮捕されたかのように
印象操作しているから悪質 べつに誰も何も言ってないだろ
おまいがそう解釈しただけでは Haskell で開発されたアプリケーションのソースで、こういう形のものがある。
---[ Main.hs ]---
module Main where
import Application (runApp)
main :: IO ()
main = runApp
---[ Application.hs ]---
module Application (runApp) where
runApp :: IO ()
runApp = do
ほりゃらら
つまり、Main モジュールにはできるだけ何も書かず、別のモジュールに仕事を移譲している。
中には runApp 関数を一つ持つ Application クラスと、そのインスタンス型が一つだけ定義されている事もある。
このような実装の runApp 関数が実際に担っているロールはどれもアプリのエントリポイントだ。
しかし、これはまさに main 関数のロールではないだろうか。
main 関数が本来担う仕事を他の関数に丸投げする事にどのような意味やメリットがあるのだろうか。 >>380
runAppとは別の処理をrunAppの前後に入れるときにmainに書き足すだけで楽とかじゃね? おれはmainに直接書くわ。Haskell以外でもそうしてる。 stackで新規プロジェクト作成するとmainからsomeFuncに飛んでるよね Advent Calendar催促おばさんが面白い >>380
runAppの処理を別のモジュールやアプリに組み込みたいとき、名前がmainだと困る、とか >>382
楽かどうかという視点ならば、前後に入れるだけなら、
その手間は runApp 関数の中に入れるのと同程度ではないか?
別の処理だからという視点ならば、確かに一見理にかなっていそうたが、
アプリが立ち上がった直後、エントリポイントのロールよりも前に仕事をするものとは、
いったいどのようなロールなのだろう?
私が見てきたアプリでは、runApp 関数の中でコマンドライン解析や設定ファイルの読み込み、
ログシステムの構築なども行っていた。
要するにアプリを動かす準備だ。
準備をする前にすべき事とは?
>>387
runApp 関数内にそのアプリ専用のエントリポイントが書かれたものしか見たことがなく、
それを別のモジュールやアプリに組み込むという状況が想像できないのだが、
具体的にどういう事なのだろう?
その場合、関数名が main だとなぜ困るのだろう? >>378
社員が総出でtwitterで開発が上手くいかなかったから詐欺にされたって
デマ流しまくっているじゃん pythonにはxonshとかいうシェル言語があるらしい
http://vaaaaaanquish.hatenablog.com/entry/2017/11/30/175236
これのHaskellバージョンがあれば便利じゃないか。
Haskellとの親和性は高いと思う。シェルスクリプトって要はコマンドのコンビネータだし、コマンド呼び出しの構文は関数適用によく似てる。 ただ、ls -a -l -d hoobar みたいなのをシームレスに書くのはチャレンジングな課題だ。
引数の文字列リテラルのリストなどをコマンドラインにイチイチ打ち込むのは面倒くさい。
RebindableSyntaxでマイナスを定義し直して、、いや、悪手っぽいか。
なるべくHaskellを書いていきたい。いちばん身近なところを置き換えられたなら、とても良い。 haskellバージョンのイメージわかないけど
haskellシェルは何がどう便利になるというの? pythonの真似だから便利さもpythonと同じになる計画なんだろ
同じにならなかったら、計画通りに行動しなかった奴が戦犯で、計画立てた奴は無罪 シェルスクリプトを使えばいいと思う
なぜコマンドの実行にHaskellを使う必要があるのか まあconfigureスクリプトにはm4とかいうプリプロセッサがあるから意外と難しいよな EzoeがいつHaskellに飽きて堂々とディスり始めるのか楽しみ ガチC++erから見たHaskellというのに少し興味が湧いている 仕様壊れてるC++に慣らされきった人間にHaskellの厳格さの価値がわかるのかねぇ
静的型不要論的な妄言吐きそう この人は本当にプログラム書けるのかと不安になることがあるよな。
はっきり言ってc++普及に関しては逆効果をあげてるとしか思えん。 ローカルマシンにある jenkins において、haskell コードのビルドに stack を使いたいのですが、
その際に環境変数として HOME が設定されていないと使えません。
そこで、ビルド時に使うシェルスクリプト内で HOME を JENKINS_HOME に設定しましたが、
このディレクトリでは何か問題あるでしょうか。
取りあえずやってみましたら、今のところ特に問題なくビルドできていますが・・・
スレチでしたらすみません。 >>406
jenkinsはわからないがstackはどうやら $HOME 直下に .stack ディレクトリを作って
そこに(必要なら)ghcとかをインストールするらしい。
例えばconfig.yamlもそこに入っているので、普段の$HOMEにそれがある場合は、jenkinsでのビルドと設定が変わってしまう。
とはいえ、このファイルが働くのは特定のプロジェクトに属さない動作のとき(stack newとか)だけっぽいので、
ディスクの容量が切迫してるとかでない限り、問題ないんじゃないかな。 C#しか知らない大学生なんだが関数型を理解したいんだが何すれば は?勉強目的なら言語名でググって検索件数が多いやつのほうが解決策見つけやすいだろHaskell一択だろぉ F#もいいけどまずはHaskellの純粋さに感動してからの方が良いよ 言語仕様はもちろんとして純粋関数型のデータ構造やアルゴリズムも合わせて学習しないと手詰まりになる 状態マシンでなく関数合成に持ち込む為の定番手法,
例えばiteratee?とかの知識も知りたい。 プラグマとかシンタックスシュガーのオプションがやたらあって、
古い構文がデフォルトでなくなったり、いまだに安定してないイメージが強い 拡張の数は標準の安定性と関係ないし非推奨になった構文も知る限り2,3個程度しかないし言うほど安定してなくはないと思うよ
主要な拡張の破壊的変更も多ければ不安定だがそこは知らん
安定してる言語の話題たまに出るけどどの言語もそれなりに不安定という結論以外になったとこ見たことない そういや使用安定してるからで極地でCLが使われてたな >>407
アドバイスありがとうございました。
参考にします。 再帰ってわかりにくくないですか?
実際によく使われているんですか? 扱うデータ構造が再帰的なら(連結リストとか木とか)
アルゴリズムも再帰の方が自然 初見だと脳のワーキングメモリをオーバーフローして拒絶反応を示すけど
慣れたら問題先送りにしちゃって尚且つ最後には解決しちゃう魔法みたいで気持ちいいよ ループより再帰が好きだけどスタック気にしたりわざわざ末尾再帰にしなきゃいけなかったりするのは割とめんどい breakとcontinueとreturnとthrowは関数ではない
関数ではないものを見るとマクロを書きたがるのがLisp
Haskellはマクロを使わない技術が発達したからなんでも関数を使う HaskellはCのプリプロセッサ(俗に言うマクロ)を使えるのでは エラーの原因を教えてほしいという奴にエラーの原因を教えないのがHaskellerか
また同様のエラーが出てもこのスレにくればコード書き直してやるよっていう優しさか Windows10でstackのプロジェクトをbuildするとエラーが出てビルド出来ないお(´・ω・`)
While building custom Setup.hs for package ........
..
..
..
Process exited with code: ExitFailure 1 ボウヤは『windows10 haskell stack build error』でググるとかはしたのかい? 飢える者に魚を与えても一日しか救えない
釣りを教えれば一生救えるやもしれぬ
してみれば、>>435は魚を与えたのじゃ >>434
>>435
条件ミスってて全部otherwiseに行ってたのも直したらちゃんと動きました
ありがとうございます >>438
Windowsで動かないパッケージ使ってるとか? >>428
好き嫌いというか、ループはループ中で変数を操作するから値を返せるのであって、変数を言語から排除すれば自然にループも排除されるんじゃないの?
ループがあっても再帰が不要にはならない。でも再帰があればループ不要は本当の話。だからこそ変数を排除した言語があるんでしょ。 >>438 の原因はプロジェクトのパスに日本語が含まれているからでした...orz >>447
toBarの仕事はもっと少なくした方がいいよー
ソートとかは既存関数で手抜きしたけど、参考までに
https://ideone.com/fGFOEl stack の使い方について質問です。
stack new で作ったプロジェクトの package.yaml に executables と tests が設定されています。
その上で、tests のみのビルドあるいはビルド&実行を行うという事をしたいです。
しかしうまく行きません。
余計なものまでビルドされたり、実行されたりします。
executables には cmd-exe というターゲットがひとつ、tests には cmd-test というターゲットがひとつあるとします。
まず cmd-test のビルドだけを行いたく、stack build :cmd-test コマンドを実行してみました。
すると、cmd-exe と cmd-test がビルドされ、かつ cmd-test が実行されてしまいました。
今度は cmd-test のビルドと実行を行いたく、stack test :cmd-test コマンドを実行してみました。
すると、こちらも cmd-exe も一緒にビルドされてしまいました。
cmd-exe をビルドしないで cmd-test のみをビルドする方法、
そして cmd-test を実行しないでビルドのみを行う方法はあるでしょうか。 >>450
実行しないでビルドだけ行うのは --no-run-tests オプションを付けることで実現できましたが、
それでもまだ cmd-exe の方も同時にビルドされてしまいます。 普通の言語のできない数学者がプログラミングできるようにするための言語だ
彼らにはたやすい デフォルト遅延評価に破壊的更新超苦手とかいうパフォーマンス的には冗談みたいな存在なのに
静的型付コンパイルというだけでVMアンチ勢から謎の期待を向けられる言語Haskell この先haskellで良いGUIフレームワークって出ると思う? >>456
現行のGUIフレームワークの問題点は何でしょうか? >>459
>Haskellは遅延評価なので、リストを返す関数だからといって中間データとしてのリストを必ず作成する訳ではありませんから、
>結果を即座にfromListで書き込めば実質的に配列を出力する事が可能です。
ほんとぉ?
もう融合変換なんていらんやん まあグラフ簡約がなかったらどうなるか実験した方がいいと思う >>465
ほとんどの場合サンクを作るのは無駄だし最適化にも不利 haskellのコンパイルエラーメッセージが難解すぎる >>468
問題があるのは10行目 return (shuffle (i - 1) flipped)
これの型は実際には、IO (IO [Int]) だが期待されているのは IO [Int] だ。
IO(などのモナド) に包むために使われる return はここでは不要。外すと IO [Int] になってコンパイル通る。 >>460
> おまえらってIDE何使ってるの?
>>73 あたりで同じ質問があった。VSCode, spacemacs が人気 >>455
この話をすると決まってStrict拡張を持ち出してくるのが痛いHaskellerの特徴だな
じゃあ最初から遅延評価なんかすんじゃねえよ パフォーマンス的にはC/C++が王道だから素直にFFIを持ち出すのが王道
C/C++とFFIを無視するのは某言語の痛い特徴だよ 久々にHaskellで簡単なプログラム書いたんだけど
構造体使うだけでStateモナドもlensも必要になるあたりやっぱ欠陥言語だなこれ
最初から言語機能にいれとけや >>466
その理屈だと遅延評価しない方は更に遅いじゃん。 ■ このスレッドは過去ログ倉庫に格納されています