haskell-jp / beginners #5

なるほど、そうだったんですね!ありがとうございます!
stack new でテンプレートを作ってそこで作業するのが重要ですね強いていえば
上のチュートリアルにもある話でした
stackを使ってライブラリを作って公開するのにはどうすればいいでしょうか? 普通にstack newするとバイナリパッケージ用の構成になるっぽいので...
executable executables: のセクションを package.yaml から削除すればライブラリーだけになりますよ!
stack new project simple-library してみてできるプロジェクトを参考にしてみるのもよいかと。

ちなみに、公開する際はhackageのアカウントを作った上で(そういえば今どうやって作るんだろう)
stack upload . すればできます。
stack new project simple-library だとpackage.yamlができないんですね
ああー、そういえばそうでしたね...
https://github.com/commercialhaskell/stack-templates
simple-libraryやデフォルトのsimple含め各種テンプレートは :point_up: のリポジトリーに置いてあるんですが、ここ、あんまり真面目にメンテされてないんですよねぇ。 :disappointed_relieved:
とりあえず、先ほど触れたとおり単純に executables: の箇所を削除するだけでライブラリーのみのビルドになるのでそれだけやればよいかと!
ちなみにcabalからpackage.yamlへの変換は https://github.com/yamadapc/hpack-convert でいけるっぽいです
オレオレ templates を作ろう!
ディレクトリ構成をtemplatesにギュっとするスクリプトを昔作ったので良かったら使ってやってください(ただしプレースホルダーとかには非対応なのでちょっと中途半端…)
@Hiroto has joined the channel
Reminder:
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
@ has joined the channel
@eagle has joined the channel
Takashi NIIJIMA
@Takashi NIIJIMA has joined the channel
@myamamura has joined the channel
@kuono has joined the channel
@paulko has joined the channel
Haskellの魅力に陥り、現在勉強中です。よろしくお願い申し上げます。
3/1 の Slackbot の投稿で気づいたのですが,自分 : が分かっていません…….検索もうまくできず……すみません.タプルは「すごい Haskell 楽しく学ぼう」に書いてあったのですが…….`:` について,も し良ければご教授いただけたらと思っております.
data とか代数的データ型とか言われて(聞き覚えではなく)親しみはありますか?
(この回答によって答え方を変えた方がいいかと思うので)
いえ……すみません.自分本当に初心者で何も分かっていない状態です.
なるほど。リストって、じつは配列(メモリ上にデータがずらっと並んでるやつ)じゃなくて、メモリ上表現は大体タプルなんですよ。つまり、どう言うことかって言うと、リストっていうのは、一番目の要素と残りの要素からなるリストの組なんですね。
これだけだと有限列を表現できないので、「空のリスト」に対応する値が特別に用意されていて、これを [] といいます
はい.リストを先頭とその他で分けてる例は自分が読んだ書籍でも良く出てきていました.
: というのは、要素 x :: a と リスト xs :: [a] が与えられたときに、その組として作られるリストを x:xs :: [a] と表すことにせよ、という記号です。
有限列を表現できない理由って,先頭ではない他の要素が無限に続くかもしれないからでしょうか? @gksato san
最初の要素が a で残りのリストが [a] という理解で合っているでしょうか……?
えーと、リスト x:xs があった時、`xs` もリストなので、もし : 以外に [] がなかったら、どうやってリストが終えられるのかわからないですよね。
すみません,自分の理解が浅く,非常に初歩的な質問になってしまっていて申し訳ありません.
: はリストの終わりを示すものの一種ということでしょうか?
正確には、最初の要素は x です。これの型=値の種類が a なんですね。残りのリストは xs 、これの型=値の種類が [a] です。
なんて言えばわかりやすいのかわからないので、先に答えをいうと、いいえ。
もしこの世に [] がなかったら、というはなしなのでわかりにくかったんでしょうね。
今教えていただいたものの自分の理解は x:xs で先頭とその他を合わせたリストが書けるというもので : はその記法のための記号という感じなのですが合っているでしょうか? @gksato san
大体合っています。もっと踏み込むと、

a の要素からなるリストとは、
[] か、
x :: a と 型 a の要素からなるリスト xs の組 x:xs
のどちらかであるものである。型 a の要素からなるリスト全てからなる型を [a] と書くことにする。

というのが定義なんですね。
a[a] から成るタプルという
なるほど.
最初に教えていただいたメモリ上はタプルというお話も自分の中で飲み込めました.そのような定義になっているんですね.
だから、むしろ [3,4,5,6] :: [Int] みたいなのは 3:4:5:6:[] :: [Int] の省略記法なんですね。
3:[] というように書くと [3] と書いたのと同じというのは自分が読んだ書籍で紹介されていました.
はい。ですが本当は、`[3]` と書くと 3:[] と書いたのと同じ、というのが正しいわけです。
いや、まあ、同じ、ということばを厳密に捉えるならどっちも同じ意味ではあるんですが。
そういうことなんですね.最後に空リストを置いていることでそこがリストの終わり?を示していることと等価ということでしょうか.
リストというかメモリ上のタプルという方が正しいのでしょうか.
等価というか、そのために [] が存在するんですね。`[]` は0要素タプル、つまり () みたいなものです。(と言っても、構造が同じというだけで、`:` と (,) 、`[]` と () は厳密に区別されているので、そこは誤解しないでくださいね!)
つまり「リストはタプルである」というのは、Haskellにおいては「タプル」とは (a_1, ... ,a_n) のこと、とされているので、誤りであるわけです。
最初に教えていただいた : がなかったらリストの有限列が表現できないというお話が呑み込めました!
[] がなかったら、のあやまりですか?
すみません,そうです.`:` 以外に [] がなかったらというお話のことです.