関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
探検
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
466463
2017/05/15(月) 11:04:15.21ID:fFRu606n467デフォルトの名無しさん
2017/05/15(月) 11:55:36.63ID:3pbiASso >>466
実験は基本的にちょっとしたものでも捨てない。
結果的に後で捨てることになるかもしれんが、
捨てるつもりで実験はしない。
実験の目的や結果などをメモって残しておく。
実験の時も本番の時も思考の順は同じだから、まず型から考える。
だからシグネチャは書く。
お遊びは、ごめん、その状況がよく分からん。
コードを書くことを遊びにできる心は、揶揄でも何でもなく素直に感心する。
羨ましい。
粘土は要するに実験と同じだよね。
だからシグネチャは書くよ。
実験は基本的にちょっとしたものでも捨てない。
結果的に後で捨てることになるかもしれんが、
捨てるつもりで実験はしない。
実験の目的や結果などをメモって残しておく。
実験の時も本番の時も思考の順は同じだから、まず型から考える。
だからシグネチャは書く。
お遊びは、ごめん、その状況がよく分からん。
コードを書くことを遊びにできる心は、揶揄でも何でもなく素直に感心する。
羨ましい。
粘土は要するに実験と同じだよね。
だからシグネチャは書くよ。
468デフォルトの名無しさん
2017/05/15(月) 12:23:22.28ID:19VlPgPR 入門者のおれには勉強になる。
Stateとか使って型推論させると、MonadState使ったかなり複雑なシグネチャが出てくるんだけど、
あれはなるべく汎用的なシグネチャにしておくのがいいのかな?それとも具体的なシグネチャにするほうがいい?
Stateとか使って型推論させると、MonadState使ったかなり複雑なシグネチャが出てくるんだけど、
あれはなるべく汎用的なシグネチャにしておくのがいいのかな?それとも具体的なシグネチャにするほうがいい?
469デフォルトの名無しさん
2017/05/15(月) 12:29:59.58ID:Nyf5aX+C >>465の言ってる「使い捨てコード」は単に無名関数くらいの意味合いじゃない?
470デフォルトの名無しさん
2017/05/15(月) 13:07:35.87ID:3pbiASso >>468
そりゃ、汎用的な関数を定義したかったら汎用的なシグネチャを書くし、
具体的な関数を定義したかったら具体的なシグネチャを書くよ。
モナドトランスのスタックがいつく積まれていようが関係ない。
あと、スタックがいくつも積まれた姿を常に目にしていると思考しにくい時もある。
そんな時は type で別名を付けて分かりやすくする。
すべては自分が考えやすく、書きやすく、読みやすくするため。
>>469
無名関数にシグネチャって
map ((\x -> if even x then 1 else (-1)) :: Integer -> Int) [1..9]
みたいにか?
それは無いでしょ。
>>464 がそんなことを聞いてるとは思えん。
まぁ、書かなきゃコンパイルできない場合もあるかもしれんが、
今のところ、そんな状況になったことは一度もない。
>>464 のレスを見て俺が想像した使い捨てコードはまさに >>466 の言うような「捨てる前提の実験コード」だよ。
それはやらなくなったから >>465 で捨てコードは書かなくなったと言ったんだ。
そりゃ、汎用的な関数を定義したかったら汎用的なシグネチャを書くし、
具体的な関数を定義したかったら具体的なシグネチャを書くよ。
モナドトランスのスタックがいつく積まれていようが関係ない。
あと、スタックがいくつも積まれた姿を常に目にしていると思考しにくい時もある。
そんな時は type で別名を付けて分かりやすくする。
すべては自分が考えやすく、書きやすく、読みやすくするため。
>>469
無名関数にシグネチャって
map ((\x -> if even x then 1 else (-1)) :: Integer -> Int) [1..9]
みたいにか?
それは無いでしょ。
>>464 がそんなことを聞いてるとは思えん。
まぁ、書かなきゃコンパイルできない場合もあるかもしれんが、
今のところ、そんな状況になったことは一度もない。
>>464 のレスを見て俺が想像した使い捨てコードはまさに >>466 の言うような「捨てる前提の実験コード」だよ。
それはやらなくなったから >>465 で捨てコードは書かなくなったと言ったんだ。
471デフォルトの名無しさん
2017/05/16(火) 23:36:00.24ID:qM3Y9DLE 圏論を学んでみたい Haskeller、学ぼうとしたけど入門辺りで挫折してしまった Haskeller へ。
「圏論勉強会」なる一連の動画が youtube にアップされている。
(第13回まであって、それぞれ約2時間ある)
何年か前からアップされているので、知ってる人も多いと思う。
時々、Haskell で表現するとこんな感じ、といって実演して見せてくれるから面白いし、理解しやすい。
第1回はイントロダクション的な回で、圏論の雰囲気を掴むのが目的だから浅くサクサク進んでしまう。
だから難しく感じるのは当たり前なので、ここで諦めてしまわないように。
第2回からは圏論を学ぶ前の準備的な話からゆっくり丁寧に進むので安心して。
とりあえず全部一気に流して見て、2周目からじっくり学びながら見よう、
という学習スタイルはおすすめしない。
それだと1周目はテレビを何となくダラダラ見るのと同じで、何も理解できず、2周目に繋がらない。
(書籍なら自分のペースで読めるので、このスタイルでもいいと思うけどね)
それでは時間の無駄で、それなら初めから2周目のつもり挑んだ方がいい。
細かく一時停止して、今の話本当に理解できたかな、どこが理解できなかったんだろ、
といちいち理解度を確認しながら見ること。
また、動画内で例がいっぱい出てくるけど、自分でもオリジナルの例を作ってみるといい。
理解できたあかつきには、圏論はもちろん、Haskell がもっと面白くなる事を保証する。
「圏論勉強会」なる一連の動画が youtube にアップされている。
(第13回まであって、それぞれ約2時間ある)
何年か前からアップされているので、知ってる人も多いと思う。
時々、Haskell で表現するとこんな感じ、といって実演して見せてくれるから面白いし、理解しやすい。
第1回はイントロダクション的な回で、圏論の雰囲気を掴むのが目的だから浅くサクサク進んでしまう。
だから難しく感じるのは当たり前なので、ここで諦めてしまわないように。
第2回からは圏論を学ぶ前の準備的な話からゆっくり丁寧に進むので安心して。
とりあえず全部一気に流して見て、2周目からじっくり学びながら見よう、
という学習スタイルはおすすめしない。
それだと1周目はテレビを何となくダラダラ見るのと同じで、何も理解できず、2周目に繋がらない。
(書籍なら自分のペースで読めるので、このスタイルでもいいと思うけどね)
それでは時間の無駄で、それなら初めから2周目のつもり挑んだ方がいい。
細かく一時停止して、今の話本当に理解できたかな、どこが理解できなかったんだろ、
といちいち理解度を確認しながら見ること。
また、動画内で例がいっぱい出てくるけど、自分でもオリジナルの例を作ってみるといい。
理解できたあかつきには、圏論はもちろん、Haskell がもっと面白くなる事を保証する。
472デフォルトの名無しさん
2017/05/16(火) 23:59:22.93ID:Jwz5jkYk 圏論が分からん? 頭悪過ぎだろ。
まあコーダーなんてそんなもんかw
まあコーダーなんてそんなもんかw
473デフォルトの名無しさん
2017/05/17(水) 00:22:14.16ID:aIm9uZNt 圏論どうこう以前に文系出身だから数3Cすらわからんわ
すまんな
すまんな
474デフォルトの名無しさん
2017/05/17(水) 02:00:03.36ID:v4KZ2kPE 数学教室 πの焼き方 日常生活の数学的思考って本が圏論入門以前としては良いかも。
触り程度だけど、圏論出てる。
触り程度だけど、圏論出てる。
475デフォルトの名無しさん
2017/05/17(水) 03:53:13.08ID:t193iX6C さわりの誤用警察だ! 大人しくしろ!
476デフォルトの名無しさん
2017/05/17(水) 09:13:07.50ID:DVfwNdKJ Haskell固有のコーディングスタイルって何種類くらいあるの?それらのスタイルに名前あったりするの?
477デフォルトの名無しさん
2017/05/17(水) 09:48:25.92ID:mHKUfv3k shadowingも再代入できないから'を連打するパターン
478デフォルトの名無しさん
2017/05/17(水) 09:51:42.83ID:uSaEsMW/479デフォルトの名無しさん
2017/05/17(水) 10:55:39.88ID:knf86SYT 圏論のアイデアを盗むのは難しくない
盗用しても、そんなの圏論じゃないから盗作じゃないもんみたいな反応なので盗み放題
盗用しても、そんなの圏論じゃないから盗作じゃないもんみたいな反応なので盗み放題
480デフォルトの名無しさん
2017/05/17(水) 21:31:17.54ID:yFIpJ9bF481デフォルトの名無しさん
2017/05/17(水) 22:56:48.03ID:Noyf0zx+ >>476
まだ関数脳が出来てない時は、副作用のない関数でも手続き的な書き方するけど、関数脳が出来上がったら自然と宣言的に書いていくから、コーディングスタイルと言えるようなのは段階を踏んで成長していくもの。
そう言うのじゃなくてインデント以外にも書き方あるのかと言われれば、ある。
ブレース構文と呼ばれるCっぽい書き方。
main = do { cs <- getContents;
putStr cs}
こっちはインデントに左右されない自由に書ける。
レイアウトまたはオフサイドルールと呼ばれる書き方はPythonと同じ、インデントを考慮しないとコンパイル出来ない。
こっちが主流。
ちなみに、ポイントフリースタイルはコーディングスタイルではなく、カリー化の部分適用で見た目の引数を減らす関数の書き方。
まだ関数脳が出来てない時は、副作用のない関数でも手続き的な書き方するけど、関数脳が出来上がったら自然と宣言的に書いていくから、コーディングスタイルと言えるようなのは段階を踏んで成長していくもの。
そう言うのじゃなくてインデント以外にも書き方あるのかと言われれば、ある。
ブレース構文と呼ばれるCっぽい書き方。
main = do { cs <- getContents;
putStr cs}
こっちはインデントに左右されない自由に書ける。
レイアウトまたはオフサイドルールと呼ばれる書き方はPythonと同じ、インデントを考慮しないとコンパイル出来ない。
こっちが主流。
ちなみに、ポイントフリースタイルはコーディングスタイルではなく、カリー化の部分適用で見た目の引数を減らす関数の書き方。
482デフォルトの名無しさん
2017/05/18(木) 00:25:41.41ID:XBCR7g9y x:xs みたいな変数名の使い方ってHaskell的だよね
関数名に意味を込めておいて変数名は短く簡潔な方がいいみたいなスタイル
関数名に意味を込めておいて変数名は短く簡潔な方がいいみたいなスタイル
483デフォルトの名無しさん
2017/05/18(木) 00:27:12.80ID:xYh7ZO1T >>476
GitHub - jaspervdj/stylish-haskell: Haskell code prettifier
https://github.com/jaspervdj/stylish-haskell
GitHub - commercialhaskell/hindent: Haskell pretty printer
https://github.com/commercialhaskell/hindent
GitHub - evolutics/haskell-formatter: Haskell source code formatter
https://github.com/evolutics/haskell-formatter
GitHub - jaspervdj/stylish-haskell: Haskell code prettifier
https://github.com/jaspervdj/stylish-haskell
GitHub - commercialhaskell/hindent: Haskell pretty printer
https://github.com/commercialhaskell/hindent
GitHub - evolutics/haskell-formatter: Haskell source code formatter
https://github.com/evolutics/haskell-formatter
484デフォルトの名無しさん
2017/05/18(木) 00:38:06.79ID:EVp+48v/ Haskellの関数のアリティは常に1なので「カリー化」も「部分適用」も存在しない
485デフォルトの名無しさん
2017/05/18(木) 02:12:52.06ID:yXJEanSW Text.Printfのprintfはスゴイことをやってることはわかる
いまだに似たようなものを書くことができない
いまだに似たようなものを書くことができない
486デフォルトの名無しさん
2017/05/18(木) 03:37:21.45ID:/F28r+D1 >>482
引数の時点で使いたい構造に分けておくのは気に入ってる。
使わない部分は'_'で明示出来るし。
f xs -- リスト全体
f (x:xs) --リスト先頭と残り
f xxs@(x:xs) -- リスト全体とリスト先頭と残り同時利用
f (x:y:zs) -- リスト先頭から2個と残り
引数の時点で使いたい構造に分けておくのは気に入ってる。
使わない部分は'_'で明示出来るし。
f xs -- リスト全体
f (x:xs) --リスト先頭と残り
f xxs@(x:xs) -- リスト全体とリスト先頭と残り同時利用
f (x:y:zs) -- リスト先頭から2個と残り
487デフォルトの名無しさん
2017/05/18(木) 03:42:59.76ID:znop8OGf 遅延評価分かってるつもりだったけど分かってないな
オライリーの並列本で、次のような式があって、force使ってたら並列処理に回される前に評価されて意味無いんじゃって思ってしまった
rpar (force (map solve as))
これって、rpar引数の式が式のまま引数として渡されて、rparが並列処理内で引数を評価しようとしたタイミングでmapとforceが評価されるって理解でいいのかな?
値の遅延評価は何となく頭に入ってたけど関数の評価については意識できてなかった
オライリーの並列本で、次のような式があって、force使ってたら並列処理に回される前に評価されて意味無いんじゃって思ってしまった
rpar (force (map solve as))
これって、rpar引数の式が式のまま引数として渡されて、rparが並列処理内で引数を評価しようとしたタイミングでmapとforceが評価されるって理解でいいのかな?
値の遅延評価は何となく頭に入ってたけど関数の評価については意識できてなかった
488デフォルトの名無しさん
2017/05/18(木) 07:48:58.07ID:u6B8rj4W rparが来た時点で次のrpar,rseqと並列に実行し始めるという風になってるから遅延評価とは違う?ような気がする
引数を正格にするのは単に並列化済みのそれぞれの処理を速くしたいという意図では
引数を正格にするのは単に並列化済みのそれぞれの処理を速くしたいという意図では
489デフォルトの名無しさん
2017/05/18(木) 07:52:51.48ID:fP2O3mzY force自体の評価は遅延されるからね
式はまだ評価されてない値と考えればいい
式はまだ評価されてない値と考えればいい
490デフォルトの名無しさん
2017/05/18(木) 07:58:02.16ID:ZMFFk1e9 パターンマッチの分岐を確定するのに必要な分だけ評価する
Identityモナドみたいなやつでも⊥ではないことを確定する必要があれば評価する
Identityモナドみたいなやつでも⊥ではないことを確定する必要があれば評価する
491デフォルトの名無しさん
2017/05/18(木) 08:06:27.16ID:u6B8rj4W ではなく、評価の深さに関係してるみたいですね。rparがWHNFまでしか評価しないので。rseqでも同じかな?
492デフォルトの名無しさん
2017/05/18(木) 08:12:32.69ID:u6B8rj4W493デフォルトの名無しさん
2017/05/18(木) 08:41:17.48ID:IzAvSK7+ やるなら並列にやる(いつやるとはいってない)
↑
これが初心者キラー
↑
これが初心者キラー
494デフォルトの名無しさん
2017/05/18(木) 09:02:29.66ID:fP2O3mzY >>492
forceという関数そのものは特別扱いされないって意味
ちなみにrpar自体が引数をWHNFまで評価すると理解してるけど試せる環境がないから断言は出来ないな
forceが必要なのもWHNFの時点でrparのスパークが終わっちゃうからだと思ってるけど・・・
forceという関数そのものは特別扱いされないって意味
ちなみにrpar自体が引数をWHNFまで評価すると理解してるけど試せる環境がないから断言は出来ないな
forceが必要なのもWHNFの時点でrparのスパークが終わっちゃうからだと思ってるけど・・・
495デフォルトの名無しさん
2017/05/18(木) 12:53:58.06ID:hXrMTvib496デフォルトの名無しさん
2017/05/18(木) 14:10:00.91ID:TSzqrQQ0 >>487
forceはリストの背骨までしか評価しない。
つまり
xs=[1,2,3,4,5]
が
xs=[_,_,_,_,_]
と評価される。
でも、そのforceもリストが評価されるまで動かない。。。
マジで並列化と遅延評価は相性悪い。
forceはリストの背骨までしか評価しない。
つまり
xs=[1,2,3,4,5]
が
xs=[_,_,_,_,_]
と評価される。
でも、そのforceもリストが評価されるまで動かない。。。
マジで並列化と遅延評価は相性悪い。
497デフォルトの名無しさん
2017/05/18(木) 15:07:11.90ID:S+9vOUwt いやControl.DeepSeqのforceは再帰的に評価する
というのもリストのNFDataインスタンスはNFData a => NFData [a]だからね
head $ head $ force [[1,undefined]] はエラー
というのもリストのNFDataインスタンスはNFData a => NFData [a]だからね
head $ head $ force [[1,undefined]] はエラー
498デフォルトの名無しさん
2017/05/18(木) 17:35:00.25ID:znop8OGf force自体は何も特別では無くて遅延評価される
但し、force関数の評価時に本来はWHNFまでしか評価しない状況でもNFまで完全評価するって感じか
但し、force関数の評価時に本来はWHNFまでしか評価しない状況でもNFまで完全評価するって感じか
499デフォルトの名無しさん
2017/05/20(土) 05:58:24.02ID:7XmC+xMs http://faithandbrave.hateblo.jp/entry/20111201/1322718742
GADTs拡張で、空でないリストを前提にコーディングできるみたいですけど、
これって、静的に空でない事が判明してないと呼び出せないんですか?
空か入ってるか判らないリストについては使えないってこと?
凄い使いにくそう
GADTs拡張で、空でないリストを前提にコーディングできるみたいですけど、
これって、静的に空でない事が判明してないと呼び出せないんですか?
空か入ってるか判らないリストについては使えないってこと?
凄い使いにくそう
500デフォルトの名無しさん
2017/05/20(土) 06:15:33.02ID:eorHP7jS NonEmptyは何かしらのモデリングを行うときにパラメータが非空リストであるといった内部で生じる条件を明に扱えるようにするためのものかと思ってる
インポートした関数をつなぎ合わせるだけの部分で便利なものではない
インポートした関数をつなぎ合わせるだけの部分で便利なものではない
501デフォルトの名無しさん
2017/05/20(土) 18:25:30.00ID:SgRoQNx5 printf関数は副作用のある出力関数じゃなくて、フォーマット済みの文字列返すだけの副作用のない関数にして欲しかった。。。
502デフォルトの名無しさん
2017/05/20(土) 18:29:29.96ID:1KTJ7Tkv sprintfよろ
503デフォルトの名無しさん
2017/05/20(土) 18:59:49.62ID:SgRoQNx5 本当、それ欲しい->sprintf
504デフォルトの名無しさん
2017/05/20(土) 19:27:54.16ID:3Ne2dZP6 import Text.Printf
genMsg :: String -> String
genMsg name = printf "Hello, %s-san!" name
main :: IO ()
main = do
name <- getLine
putStrLn $ genMsg name
genMsg :: String -> String
genMsg name = printf "Hello, %s-san!" name
main :: IO ()
main = do
name <- getLine
putStrLn $ genMsg name
505デフォルトの名無しさん
2017/05/20(土) 20:25:36.74ID:HYrvvmg5 ん?
もしかしてread関数みたく型指定したらいけるって事け?
テキストに行番号振るナンバリング関数で数字と文字列のタプル受け取って文字列返すラムダ式をconcat[show x,str]から書き換えたらエラー出たんだけど、型指定で行けるなら再挑戦して見るかな。。。
もしかしてread関数みたく型指定したらいけるって事け?
テキストに行番号振るナンバリング関数で数字と文字列のタプル受け取って文字列返すラムダ式をconcat[show x,str]から書き換えたらエラー出たんだけど、型指定で行けるなら再挑戦して見るかな。。。
506デフォルトの名無しさん
2017/05/20(土) 20:37:45.54ID:/vBlyS11 printfはほんと実装どうなってんのって感じ
507デフォルトの名無しさん
2017/05/20(土) 20:41:46.24ID:HYrvvmg5 実装自体はHoogleで調べたら見れるけど、見ても分からんかった記憶がある。
508デフォルトの名無しさん
2017/05/20(土) 21:15:44.41ID:ZfDONXvK a=>PrintfArg、b=>PrintfTypeのとき、
String -> bはPrintfTypeである
a -> bもPrintfTypeである
StringもPrintfTypeである
IO ()もPrintfTypeである
…を繋ぐと動くんだったかな
String -> bはPrintfTypeである
a -> bもPrintfTypeである
StringもPrintfTypeである
IO ()もPrintfTypeである
…を繋ぐと動くんだったかな
509デフォルトの名無しさん
2017/05/21(日) 06:36:57.09ID:YZtqITyu 型指定で行けたわ。
>>504thanks!!
import System.Environment
import Text.Printf
-- 数値型を文字列型に変換して文字列の頭に追加
consNum::(Int,String) -> String
consNum (x,s) = printf "%4d:%s" x s
-- 文章の行ごとに番号を振る
numbering = unlines.(map consNum).(zip [1..]).lines
-- ファイル名と内容(行番号付き)のタプルを作る
zipFile_Content f = (zip f).map numbering
-- ファイル名とファイルの内容を表示
putFile_Content (f,c) = printf "%s\n%s" f c
main = do
args <- getArgs -- コマンドから与えられたファイルのリストを受け取る
cs <- mapM readFile args -- 全てのファイルの内容を読み込む
mapM_ putFile_Content $ zipFile_Content args cs -- 全てのファイルのファイル名と内容(行番号付き)を表示
>>504thanks!!
import System.Environment
import Text.Printf
-- 数値型を文字列型に変換して文字列の頭に追加
consNum::(Int,String) -> String
consNum (x,s) = printf "%4d:%s" x s
-- 文章の行ごとに番号を振る
numbering = unlines.(map consNum).(zip [1..]).lines
-- ファイル名と内容(行番号付き)のタプルを作る
zipFile_Content f = (zip f).map numbering
-- ファイル名とファイルの内容を表示
putFile_Content (f,c) = printf "%s\n%s" f c
main = do
args <- getArgs -- コマンドから与えられたファイルのリストを受け取る
cs <- mapM readFile args -- 全てのファイルの内容を読み込む
mapM_ putFile_Content $ zipFile_Content args cs -- 全てのファイルのファイル名と内容(行番号付き)を表示
510デフォルトの名無しさん
2017/05/21(日) 06:53:36.19ID:YZtqITyu この長さならputFile_Contentをラムダ式に戻しても良いな。
511デフォルトの名無しさん
2017/05/21(日) 07:21:47.89ID:NQzGLOFd >>506
可変長引数の仕組みはこんな感じ
class Count r where count :: Int -> r
instance Count Int where count n = n
instance (Count r) => Count (a -> r) where count n = const (count (n+1))
countArgs = count 0
main = print $ (countArgs 1 True "a" :: Int)
可変長引数の仕組みはこんな感じ
class Count r where count :: Int -> r
instance Count Int where count n = n
instance (Count r) => Count (a -> r) where count n = const (count (n+1))
countArgs = count 0
main = print $ (countArgs 1 True "a" :: Int)
512デフォルトの名無しさん
2017/05/22(月) 19:08:38.92ID:5O5zI7xX >>511
これcountArgは型推論で型解決されてるの?
これcountArgは型推論で型解決されてるの?
513デフォルトの名無しさん
2017/05/22(月) 22:52:47.32ID:8pBxEsLa 1 2 3みたいなコードのエラーメッセージを見るに
関数適用で引数分の関数だと推論されるんだろうね
関数適用で引数分の関数だと推論されるんだろうね
514デフォルトの名無しさん
2017/05/23(火) 10:24:38.23ID:3W0XlzKr Haskell - GHC for iOS : iOSアプリをHaskellで開発する
http://blog.euphonictech.com/entry/2015/01/26/210101
GUIはObjective-Cに任せて中身はHaskell。
テーブルゲーム系は作りやすい言語だから、案外向いてるかも。。。
http://blog.euphonictech.com/entry/2015/01/26/210101
GUIはObjective-Cに任せて中身はHaskell。
テーブルゲーム系は作りやすい言語だから、案外向いてるかも。。。
515デフォルトの名無しさん
2017/05/23(火) 14:48:19.87ID:f1Q/bDWm Androidは?
516デフォルトの名無しさん
2017/05/23(火) 17:25:53.49ID:PJIONmxy haskell androidでググったらトップで出るお。
Ubuntuなら最初の辺りは省けそう。
cabalじゃなくてstack入れた上でcabalへのパス通す方向で行った方が失敗少なそう。
Ubuntuなら最初の辺りは省けそう。
cabalじゃなくてstack入れた上でcabalへのパス通す方向で行った方が失敗少なそう。
517デフォルトの名無しさん
2017/05/23(火) 19:23:10.81ID:jde/WziY ghc ios弄ってるよ。
7.8のghcは32bits版はghc公式のサイトにある。64bits のghc iosバイナリは公開されてない。
Appleのお達しにより64bitsを同梱しなければApp Storeにリリース出来ない。
HEADは試してないけど、3/27のソースではビルドは通った(ちなみにそのソースでは32bitsは素直に通らない)。
64bits のghc iosは現在活発にメンテされているようです。
俺は今は make binary-dist (つまり、ghc-....tar.xzを作るやつ)と、stackを直しています。
stackはcross compiler対応してないので、改造が必要なんだ。stack setup --os ios で一発インストールできるとこまで持っていきたい。
> cabalじゃなくてstack入れた上でcabalへのパス通す方向で行った方が失敗少なそう。
そのワークアラウンドは思いつかなかった。詳しくおしえてくれませんか。
7.8のghcは32bits版はghc公式のサイトにある。64bits のghc iosバイナリは公開されてない。
Appleのお達しにより64bitsを同梱しなければApp Storeにリリース出来ない。
HEADは試してないけど、3/27のソースではビルドは通った(ちなみにそのソースでは32bitsは素直に通らない)。
64bits のghc iosは現在活発にメンテされているようです。
俺は今は make binary-dist (つまり、ghc-....tar.xzを作るやつ)と、stackを直しています。
stackはcross compiler対応してないので、改造が必要なんだ。stack setup --os ios で一発インストールできるとこまで持っていきたい。
> cabalじゃなくてstack入れた上でcabalへのパス通す方向で行った方が失敗少なそう。
そのワークアラウンドは思いつかなかった。詳しくおしえてくれませんか。
518デフォルトの名無しさん
2017/05/23(火) 19:32:03.75ID:5hEoQuZK え、cabalって書いてるところをstackに置き換えるけど、パス通す時cabalへのパスって言う、非常に単純で頭の悪いやり方だが。。。
単純にcabalが依存関係で止まる確率下がらないかなぁと。
単純にcabalが依存関係で止まる確率下がらないかなぁと。
519デフォルトの名無しさん
2017/05/23(火) 22:54:19.25ID:jde/WziY >>518
なるほど。俺が勘違いしているのでなければ、
http://ipx.hatenablog.com/entry/2015/05/02/093634
のページのajhcをcabal install するときの話ですね。
うちの環境はMacなのでためせないのだけど、hackageにあるajhcのcabalファイルをみると依存パッケージのバージョン指定がほぼ無いので、ひょっとするとビルド通るかも。
少なくともstackの方がcabalよりは可能性高そうですね。
スマホ開発について、俺はajhcを使うアプローチは試してないのですが、他にもGHCjsを使ってjavascriptに落とした後、
PhoneGapとかで埋め込む、って手もありそうです。
なるほど。俺が勘違いしているのでなければ、
http://ipx.hatenablog.com/entry/2015/05/02/093634
のページのajhcをcabal install するときの話ですね。
うちの環境はMacなのでためせないのだけど、hackageにあるajhcのcabalファイルをみると依存パッケージのバージョン指定がほぼ無いので、ひょっとするとビルド通るかも。
少なくともstackの方がcabalよりは可能性高そうですね。
スマホ開発について、俺はajhcを使うアプローチは試してないのですが、他にもGHCjsを使ってjavascriptに落とした後、
PhoneGapとかで埋め込む、って手もありそうです。
520デフォルトの名無しさん
2017/05/24(水) 00:32:17.87ID:NrN6swuV GHCjsなんてあったんだ。。。
fayってのはどこかのブログで見かけたけど。
fayってのはどこかのブログで見かけたけど。
521デフォルトの名無しさん
2017/05/24(水) 21:57:13.55ID:NmDuToTQ 数値が書かれた文字列の大きさを比べたりソートするときってIntに変換しなくても大丈夫?
522デフォルトの名無しさん
2017/05/24(水) 22:29:07.75ID:yk/rwiNc523デフォルトの名無しさん
2017/05/24(水) 22:31:16.66ID:yk/rwiNc ただし後者は…読めない
524デフォルトの名無しさん
2017/05/24(水) 22:54:24.29ID:YpWp2KMv a="1000"とb="999"を比べるとして、
頭から3桁目までを比べるとbのほうが大きい
けどaにはまだ続きがあってbには続きがない、だからaが大きい
こんなアルゴリズムだったような
頭から3桁目までを比べるとbのほうが大きい
けどaにはまだ続きがあってbには続きがない、だからaが大きい
こんなアルゴリズムだったような
525デフォルトの名無しさん
2017/05/25(木) 00:11:42.62ID:izfj8ylF526デフォルトの名無しさん
2017/05/25(木) 00:33:59.08ID:Q9+DetqO527デフォルトの名無しさん
2017/05/25(木) 00:46:54.13ID:ZBW/Sl3S みんなありがとう
read :: String -> Intって書くのがめんどくさくて楽したかっただけなんだ
めんどくさがらずにちゃんとやるよ
read :: String -> Intって書くのがめんどくさくて楽したかっただけなんだ
めんどくさがらずにちゃんとやるよ
528デフォルトの名無しさん
2017/05/25(木) 01:31:24.27ID:fGPRo4Tg naturalcompを入れた場合、
Prelude> :m +Data.List Text.NaturalComp
Prelude Data.List Text.NaturalComp> naturalComp "1000" "999"
GT
Prelude Data.List Text.NaturalComp> sortBy naturalComp ["1","99","1000","10","999","9"]
["1","9","10","99","999","1000"]
だいたい思ったとおりになると思うが
Prelude> :m +Data.List Text.NaturalComp
Prelude Data.List Text.NaturalComp> naturalComp "1000" "999"
GT
Prelude Data.List Text.NaturalComp> sortBy naturalComp ["1","99","1000","10","999","9"]
["1","9","10","99","999","1000"]
だいたい思ったとおりになると思うが
529デフォルトの名無しさん
2017/05/25(木) 09:09:45.17ID:ob559wKW530デフォルトの名無しさん
2017/05/25(木) 11:03:59.19ID:izfj8ylF >>529
こんな簡単なことで外部ライブラリに依存とかしたくないでしょ
こんな簡単なことで外部ライブラリに依存とかしたくないでしょ
531デフォルトの名無しさん
2017/05/25(木) 11:22:28.03ID:jD8c7u6v まあねぇ。
んじゃあ桁ごとにグループ分けして、それぞれをソートして、その後結合?
んじゃあ桁ごとにグループ分けして、それぞれをソートして、その後結合?
532デフォルトの名無しさん
2017/05/25(木) 11:41:35.46ID:XfbQ4lvY533デフォルトの名無しさん
2017/05/25(木) 13:06:15.57ID:jD8c7u6v 昔のHaskellの(1+n)形式の引数復活しないかな。。。
代数的データ型で自然数作ったりの時、普通の関数だとこう。みたいな整合性が取れないのがね。。。
type Nat = Succ(Nat) | Zero
dec (succ(n)) = n
dec(Succ(Zero))
>Zero
dec (1 + n) = n
dec 1
>0
代数的データ型で自然数作ったりの時、普通の関数だとこう。みたいな整合性が取れないのがね。。。
type Nat = Succ(Nat) | Zero
dec (succ(n)) = n
dec(Succ(Zero))
>Zero
dec (1 + n) = n
dec 1
>0
534デフォルトの名無しさん
2017/05/25(木) 14:02:18.77ID:XfbQ4lvY >>533
どんな時に代数的データ型で自然数を作るの?
どんな時に代数的データ型で自然数を作るの?
535デフォルトの名無しさん
2017/05/25(木) 18:02:15.54ID:KkJBSxnE お遊びの時。
だから無くても困らないけど、昔あったの知ってると復活しないかな。。。と。
だから無くても困らないけど、昔あったの知ってると復活しないかな。。。と。
536デフォルトの名無しさん
2017/05/26(金) 00:23:29.72ID:lBtW1IaY {-# LANGUAGE NPlusKPatterns #-}
537デフォルトの名無しさん
2017/05/26(金) 02:18:52.31ID:NvS9muX6 何!!
復活の呪文あるんか!!
復活の呪文あるんか!!
538デフォルトの名無しさん
2017/05/26(金) 03:26:42.35ID:NvS9muX6 dec (n + 1) = n
は通るけど
dec (1 + n) = n
は通らない。。。
なんかモヤモヤ。。。
は通るけど
dec (1 + n) = n
は通らない。。。
なんかモヤモヤ。。。
539デフォルトの名無しさん
2017/05/26(金) 06:58:01.57ID:57q7qnDF Haskellerこっわ
https://twitter.com/ncaq/status/867682756821565441
https://twitter.com/ncaq/status/867682756821565441
540デフォルトの名無しさん
2017/05/26(金) 07:45:17.70ID:npmNm3qp NPlusK ゆうとるやろが
541デフォルトの名無しさん
2017/05/26(金) 08:02:14.29ID:BGbWYOFh だからKPlusNを追加したら、ンなもんねーよって怒られた。。。
あるだけ有難いけどね。
あるだけ有難いけどね。
542デフォルトの名無しさん
2017/05/26(金) 08:07:54.48ID:BGbWYOFh >>539
Haskell使いって入ってるだけで、コードも何も語ってないやん。
はてなのHaskellerは優秀で良い人ばかりだお。
おいらは優秀じゃないし、プログラミング自体からほとんど引退してるからやめたけど。
Haskell使いって入ってるだけで、コードも何も語ってないやん。
はてなのHaskellerは優秀で良い人ばかりだお。
おいらは優秀じゃないし、プログラミング自体からほとんど引退してるからやめたけど。
543デフォルトの名無しさん
2017/05/26(金) 08:24:06.27ID:KgVkYaTe 突然の自分語り
544デフォルトの名無しさん
2017/05/26(金) 09:52:10.14ID:x3L8qn59 Haskellのプログラミングで金をもらう
Haskellerなる人物に何人も合ったが、
精神科通いとかの頭のオカシイやつばっかだった。
たまたまなのかも知れんが。
Haskellerなる人物に何人も合ったが、
精神科通いとかの頭のオカシイやつばっかだった。
たまたまなのかも知れんが。
545デフォルトの名無しさん
2017/05/26(金) 10:07:05.22ID:lBtW1IaY 両方名うてのキチガイやないかw
546デフォルトの名無しさん
2017/05/26(金) 10:08:41.81ID:lBtW1IaY ちなみにHaskellerがおかしいというよりは
CS業界が全般に発達障害とキチガイに寛容なだけ
CS業界が全般に発達障害とキチガイに寛容なだけ
547デフォルトの名無しさん
2017/05/26(金) 10:25:10.56ID:NDbIiRhl 東大京大
548デフォルトの名無しさん
2017/05/26(金) 10:47:10.88ID:NDbIiRhl549デフォルトの名無しさん
2017/05/26(金) 11:08:43.28ID:7I4ytZjC fumieval知らないとかモグリにもほどがある
自称関数型コミュニティでは超有名人
自称関数型コミュニティでは超有名人
550デフォルトの名無しさん
2017/05/26(金) 11:51:40.04ID:lBtW1IaY551デフォルトの名無しさん
2017/05/26(金) 12:25:49.52ID:npmNm3qp なにかHaskellにはそういう魔力めいた魅力でもあるのでしょうか
552デフォルトの名無しさん
2017/05/26(金) 14:22:36.33ID:ck4pDWmC 関数脳になるとHaskellが癖になるのは確か。
オブジェクト指向のメソッドチェーンも入力->出力の連鎖で、関数型と同じなんだけど、ループや分岐も再帰やパターンマッチで書くから、より入力->出力に専念出来る。
思考がシンプルになる。
オブジェクト指向も思考をシンプルにする事を目指してるけど、クラス作る側とクラス使う側で大きな溝が出来てしまった。
オブジェクト指向のメソッドチェーンも入力->出力の連鎖で、関数型と同じなんだけど、ループや分岐も再帰やパターンマッチで書くから、より入力->出力に専念出来る。
思考がシンプルになる。
オブジェクト指向も思考をシンプルにする事を目指してるけど、クラス作る側とクラス使う側で大きな溝が出来てしまった。
553デフォルトの名無しさん
2017/05/26(金) 16:33:50.74ID:kKmQOK+/ 良くも悪くも変人しかHaskellなんて覚えようと思わないからじゃないかな
明らかに文法が異質だもの
多分みんな人生で何度か「変わってるね」って言われたことあるはず
明らかに文法が異質だもの
多分みんな人生で何度か「変わってるね」って言われたことあるはず
554デフォルトの名無しさん
2017/05/26(金) 17:33:52.44ID:ZKqulABJ 変わってると言えば否定しないけど、どの言語にもおいらみたいなのは一部居るんじゃないかな。
強いて言えばPythonやRubyにさえも挫折したおいらがHaskellで色々書けるようになって、書けるようになってからはPythonやRubyでも書けるようになって、Cでも書けるようにもなった。
例えばRubyのeach_slice相当の関数はHaskellに存在しない。
(Hoogleで調べても無かった)
でも、動きを理解さえすればすぐに同じ動きの関数が書けた。
PythonやRubyは基本が手続き型言語だから、ライブラリを知らないとか、ライブラリに存在しない時に急に難しくなる。
おいらみたいに、LLでさえ手続き型言語で挫折した人がHaskellで出来るようになって、はしゃいでるとかは有るかもね。
強いて言えばPythonやRubyにさえも挫折したおいらがHaskellで色々書けるようになって、書けるようになってからはPythonやRubyでも書けるようになって、Cでも書けるようにもなった。
例えばRubyのeach_slice相当の関数はHaskellに存在しない。
(Hoogleで調べても無かった)
でも、動きを理解さえすればすぐに同じ動きの関数が書けた。
PythonやRubyは基本が手続き型言語だから、ライブラリを知らないとか、ライブラリに存在しない時に急に難しくなる。
おいらみたいに、LLでさえ手続き型言語で挫折した人がHaskellで出来るようになって、はしゃいでるとかは有るかもね。
555デフォルトの名無しさん
2017/05/26(金) 17:41:46.50ID:57q7qnDF 例の包丁Haskellerもそうだが、使っている奴は厨二病患者が多い
本当に厨二心をくすぐる言語なんだよ…
OCamlメインの俺としては変なのがこっちに吸われていて助かる
本当に厨二心をくすぐる言語なんだよ…
OCamlメインの俺としては変なのがこっちに吸われていて助かる
556デフォルトの名無しさん
2017/05/26(金) 18:45:55.29ID:ZQcANW7U 変数も引数なしの値を返す関数。
a = 1
モナドもセクションにすればただの関数。
import System.Environment
slice n xs | length xs < n || n <= 0 = []
slice n xs = ys:slice n zs
where
(ys,zs) = splitAt n xs
main = (>>=) getArgs (print.slice 2)
そういう意味で、mainすらも引数なしでプログラムの結果を返す関数。
全てが関数と型と値だけで考えられる。
厨二で上等。
一貫した考えが素晴らしいね。
煩わしさがない。
a = 1
モナドもセクションにすればただの関数。
import System.Environment
slice n xs | length xs < n || n <= 0 = []
slice n xs = ys:slice n zs
where
(ys,zs) = splitAt n xs
main = (>>=) getArgs (print.slice 2)
そういう意味で、mainすらも引数なしでプログラムの結果を返す関数。
全てが関数と型と値だけで考えられる。
厨二で上等。
一貫した考えが素晴らしいね。
煩わしさがない。
557デフォルトの名無しさん
2017/05/26(金) 18:49:06.98ID:sZfcErOL なぜ自分は変じゃないと思えるのか……
558デフォルトの名無しさん
2017/05/26(金) 18:49:10.19ID:ulIxfp/C OCamlはラクダだもんな。厨二病もクソもないw
OcamlとかClojureはコードが丸い印象。Haskellは何か尖ってるよね。
OcamlとかClojureはコードが丸い印象。Haskellは何か尖ってるよね。
559デフォルトの名無しさん
2017/05/26(金) 18:50:59.74ID:40xXL869 コメントが (* *) だからさ
560デフォルトの名無しさん
2017/05/26(金) 19:01:21.32ID:ZQcANW7U561デフォルトの名無しさん
2017/05/26(金) 19:40:17.16ID:xBragGUI >>556
セクションは部分適用した二項演算子のことだぞ
セクションは部分適用した二項演算子のことだぞ
562デフォルトの名無しさん
2017/05/26(金) 20:51:35.80ID:ovKX6RUR あれ、どっちもセクションじゃ無かったっけ?と久しぶりに調べたら。。。
前置き形式?で良いのかな?
これは済まんかった。
前置き形式?で良いのかな?
これは済まんかった。
563デフォルトの名無しさん
2017/05/26(金) 21:07:05.78ID:lBtW1IaY564デフォルトの名無しさん
2017/05/26(金) 21:28:16.56ID:TC/C61F7 変な文法と言えばPrologとかJ言語とか
565デフォルトの名無しさん
2017/05/26(金) 21:36:15.75ID:ovKX6RUR >>558
OCamlもHaskellも同じML系なのにどうしてそう感じたんだろう?
おいらみたいな使ってるやつの印象ってだけだったり?
おいらみたいなのは少数派だよ。
声が大きいから、たくさん居るように感じるだけ。
OCamlもHaskellも同じML系なのにどうしてそう感じたんだろう?
おいらみたいな使ってるやつの印象ってだけだったり?
おいらみたいなのは少数派だよ。
声が大きいから、たくさん居るように感じるだけ。
566デフォルトの名無しさん
2017/05/26(金) 21:41:20.55ID:0YCuYapQ すみません、質問です
f :: a -> b と g :: a -> c があったときに
\x -> (f x, g x) に相当する関数はライブラリに用意されてますか?
f :: a -> b と g :: a -> c があったときに
\x -> (f x, g x) に相当する関数はライブラリに用意されてますか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★4 [♪♪♪★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 日中関係悪化で「日本からもうすぐパンダがいなくなる」 中国SNSでトレンド1位に★2 [♪♪♪★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【音楽】石川ひとみ「まちぶせ」はストーカーか 衆院委で質問 [膳摩漏★]
- 【実況】博衣こよりのえちえちホロ分かり手クイズ🧪🏴‍☠🌸
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」 [115996789]
- 【悲報】さだまさし「安倍晋三さんは日本で一番孤独で、日本で一番寂しくて、日本で一番苦しい立場だった」 [616817505]
- 高市早苗「宣戦布告は撤回しない!」中国「何なのコイツ」外務省「うちのトカゲです」中国「ガハハハ」今こんな感じ [517791167]
- 【悲報】大物投資家「高市経済政策ヤバイ、物価高と少子化の対処療法ばっかりで国債刷ってこれは日本経済的にはこれは終わった [733893279]
- 【んな専🏡】華金もんなっしょいとはやれやれなのらね🍬(・o・🍬)🏰
