haskell-jp / beginners #10

うーむ、正直なところ私としては読めないほどひどい問題でもないので放置かな...
最初ざっとスクロールしたときは気づかなかったぐらいでした。
igrepさんの言われる通り、以下のページが、GHCのバグ報告先になります。
https://gitlab.haskell.org/ghc/ghc/-/issues
Sign in した上で、"New issue"ボタンから報告できます。
あまりかたく考えないで、気軽にバグ報告を書いて大丈夫です。 不足点などがあれば、
適時教えてくれると思います。

参考として、GHCのドキュメント関連のissueのリストは以下で表示できます。
https://gitlab.haskell.org/ghc/ghc/-/issues?label_name%5B%5D=documentation

あと、バグ報告の詳細については、以下のページに詳細説明がありますが、これに
厳密に沿わなくても構わないので、一番上のページで気軽に報告すれば大丈夫です。
https://gitlab.haskell.org/ghc/ghc/-/wikis/gitlab/issues
ありがとうございます!内容は @igrep さんがおっしゃる通り大した事はないので、気楽に練習のつもりでトライしてみます。
コンテンツブロッカーを入れていた影響で、gitlabのページコンテンツが中途半端にしか読み込まれず、プレビューを押しただけでコミットされ、いつの間にか同じissueをいくつもオープンしリポジトリを汚してしまいました…今後同じ事がおきないように誰かのお役に立てればということでメモ…orz
@kerf_cat has joined the channel
@hosoda has joined the channel
@bluehighwayjp has joined the channel
being.paperlefthand
@being.paperlefthand has joined the channel
@yagusu1231 has joined the channel
@fujio has joined the channel
@sereronnrot has joined the channel
@kyaddress has joined the channel
benzene.chlorobenzene
func :: a -> ( a->b, a->c, ... , a->x ) -> ( b, c, ... , x ) のような関数はどのように実装すればよいのでしょうか
これはいろんな長さのタプルに対して使用できる func :: a -> ( a->b, a->c, ... , a->x ) -> ( b, c, ... , x ) がほしい、ということですよね?
原則としてタプルはサイズが決まっていて、サイズが決まっているからこそ何番目にどの型が入るか決められる、という仕様なので、基本的には無理です。

が、Template Haskellというコンパイル時にコードを生成する機能を使えば、擬似的にそうした関数を書くことはできます。
コンパイル時に、受け取ったタプルの長さに応じて生成する関数を変えるわけです。
http://hshstter.hatenablog.com/entry/2012/04/15/121001 などが参考になるかと。
あと、Template Haskellを使わずともGenericsというこれまたGHCの高度な機能を使えばできるかも知れませんが、これに関しては詳しいやり方についてちょっと自信がないので割愛します。
benzene.chlorobenzene
ありがとうございます
一応、念の為ですが、もしも、b, c, ... x の型がいずれも同じ型で、かつ、タプルではなくてリストの形でも良いのであれば、mapで簡易に記述できます。

つまり例えば、型が、以下でよければ、
func :: a -> [a -> b] -> [b]

以下のように、 map と、関数適用 $ を使って関数を書けます。
func :: a -> [a -> b] -> [b]
func a fs = map ($ a) fs

そして、以下のように、使えます。
ghci> func 1 [(+1), (+2), (*10), abs, (\x -> x * 100)]
[2,3,10,1,100]

そういう質問では無いですね?:slightly_smiling_face:
benzene.chlorobenzene
確認ありがとうございます、そうだったら楽だったのですがやっぱり質問文の通りです…
ご質問の背景がわからないので、見当違いの回答かもしれませんが、タプルの代わりにHeterogenous Listを使用することで、問題が解決できないか気になりました。(私もHeterogenous Listに詳しいわけではないのですが。。)

https://wiki.haskell.org/Heterogenous_collections
@arakur65536 has joined the channel
Reminder:
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
@clha4fn6 has joined the channel
@dyoshikawa1993 has joined the channel
@niszet0016 has joined the channel
@s1170087 has joined the channel
@kats.ando has joined the channel
@gkusumoto has joined the channel
@aprilfoolsd1y has joined the channel
@masahide.swimming has joined the channel
@neromoze has joined the channel
@kuroko1384 has joined the channel
@ahoudori7779 has joined the channel
初めまして。
純粋関数言語という言葉に惹かれて、Haskellについて勉強しています。
language serverについて質問しても大丈夫でしょうか。vscodeにhaskellの拡張機能を入れたのですが、project requires ghc but it isn't installedとエラーになります。
原因が分かりますでしょうか?
環境は以下になります。
OS :ubuntu 20.04
tool : stack
resolver:lts-16.12

ターミナルからはstackが使用可能です。
.bashrcには
eval "$(stack --bash-completion-script stack)"
export PATH=~/local/bin:$PATH
を記入しています

よろしくお願いします。
該当の問題が発生しているディレクトリーで、 stack setup を実行してみてください。
どこのディレクトリーかわからなければどこでも大丈夫です。
情報ありがとうございます。
頂いた情報を試してみたのですが、望んだ結果が得られませんでした。
しかし、少し前進したので質問を以下に変更します。
・グローバルプロジェクトでもhlsを起動させることは可能でしょうか?
頂いた情報でディレクトリごとに設定するということが分かったのでそれをstack newで作成したディレクトリでのhlsの起動に成功しました。
しかし、そうではないのディレクトリでは相変わらずghcが見つからないようです。
一応、 .stackのglobal-projectのstack.yamlに
ghc-options:
"$everything": -haddock
は記入しています
・グローバルプロジェクトでもhlsを起動させることは可能でしょうか?
うーん、できると思っていたんですが、やっぱりPATHにないと検出してくれないってことなんですかね...
ぱっと思いつく回避策は二つあります。

1. プロジェクト外でHaskellのコードをいじりたくなったとき、 stack exec code でVSCodeを起動する: これによってstackが環境変数を設定した状態でVSCodeを起動できるようになるので、stackがインストールしたghcも参照できるはずです。ただ、この状態からstackで管理しているプロジェクトを開いた場合に正しく起動できるかちょっと自信がないです。
2. stack path --compiler-exe コマンドを実行して表示された、ghcが入っているディレクトリー(もちろんghcそのものではなくて)を、`PATH`に追加する: この方法は比較的確実ですが、global-projectのGHCを更新したときに再度`PATH` を更新する必要があるので、やや煩雑です。
@oimonoya.ma has joined the channel
1の案をやってみたら出来ました。
ありがとうございます!:blush:
1ヵ月悶々としてたことが解決してとても嬉しいです。
本当にありがとうございます!
@syunsuke.fukuda has joined the channel
@izawaskell693 has joined the channel
shun.otani_haskell-jp
@shun.otani_haskell-jp has joined the channel
@hello has joined the channel
@kunihiro has joined the channel
@ykominami has joined the channel
@b1714935 has joined the channel
benzene.chlorobenzene
postリクエストの形でjsonを受け取ってjsonを出力する(ただしurlに応じて異なる動作をする)webサーバーを作りたいのですが、最も簡単なのはどのような方法でしょうか
https://wiki.haskell.jp/Hikers%20Guide%20to%20Haskell#web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3 をごらんください(せっかくなんでこの回答に引用するために更新しました)。
結論から言うとおそらくscottyが比較的とっつきやすいかと思います。
benzene.chlorobenzene
ありがとうございます
@ryuji.sg100 has joined the channel
cabal でローカルのライブラリを build して、そのライブラリ (executable ではない) をグローバルにインストールするためにはどうやればいいんですか?
https://haskell-jp.slack.com/archives/C5666B6BB/p1571874827038500 の回答である cabal install --lib はいかがでしょうか?