haskell-jp / questions #7

@masa.kad81000 has joined the channel
Windowsユーザのみなさん、networkパッケージのメインテナーとしての質問です。
cygwinってもうサポートしなくていいですかね?
MSYSしかサポートしてないと宣言してもよいですか?
私はGHC 7.8ぐらい(stackがサポートしている最も古いGHC)からWindowsで使い始めたので、それより前をサポートしないのであればいいと思います。
stackは必ずMSYS版GHCを自動でインストールするので。
情報ありがとう!
@mitsui has joined the channel
Windowsで、`__OpenBSD__`というCのマクロをチェックしたら、エラーになってしまうんですけど、どうしてなんでしょうか?

355行目のディレクティブ,elseifじゃなくてelifじゃないですか?
やったぜ
ありがとうございます!
ありがとうございます!!
ありがとうございます!!!
Emacsを使われてる方、教えて下さい。 (急ぎではありません。 かつ返信は遅くなります:bow:)
Emacsでは、Haskellコードのsyntax highlightに、主に、どういうツールが使われていますか?
(syntax highlightを修正しようとしています。)
stack初心者の質問です。stackのバージョンを1.5.1から1.6.1にアップグレードしようとすると以下のメッセージが表示されます。
WARNING: The "stack" executable found on the PATH environment variable is /usr/local/bin/stack, and not the version that was just installed.
This means that "stack" calls on the command line will not use this version.
New stack executable available at /Users/shioihiroto/.local/bin/stack

これの解決方法はありますか。
たぶん curl でインストールする方法だと思いますが、最近その警告が出るようになりました。

古い stack/usr/local/bin に残っていると出たような気がしますが、どうでしょうか?
stack upgrade/Users/shioihiroto/.local/bin/stack に新しいバージョンの stack をインストールしたけど、パスは /usr/local/bin/stack に通ってるんだけどいいの?
って感じだから、 /Users/shioihiroto/.local/bin/stack のパスを /usr/local/bin/stack より優先度上げればいいんじゃない?
@wado /usr/local/binにあったstackファイルを削除したら直りました!
@matsubara0507 パスの優先度の上げ方がわかりませんでした。。!
stack のバージョンが古すぎると stack upgrade した時にバイナリが落ちてこない (最新の stack をソースコードからコンパイルしだす) ので /usr/local/bin/stack を削除します。

逆に新しめの stack であれば stack upgrade してしまって export PATH=~/.local/bin:$PATH.bashrc などに追記しておくと良いと思います。

逆に export PATH=$PATH:~/.local/bin にすると常にシステムの stack を参照するのではまります。

最新の stackchangelog を見ると、この問題に対処したように思うのですが、試してないので良くわかってないです。
昔、インデントをカスタマイズできないかと思ってhaskell-modeの中を見てみたのですが、かなりモノリシックなelispで変えるの無理やんって思った覚えがあります(役に立てず申し訳ない)
もう1つ質問です。haskell-jpにて求人募集を出すことはできますか。出す場合にはどのチャンネルが適切でしょうか。(仕事はもちろんhaskellを用いた開発です)。
前例がなく、現状数が増える見込みもないので、
https://www.reddit.com/r/haskell_jp/random か、Haskell-jp Blog https://haskell.jp/blog/ に投稿するという形でいかがでしょうか。
頻度が高くなるようであれば、(Slackにこだわらず)別のチャンネルを検討します。
了解です!ありがとうございます!
@remotenonsense has joined the channel
@ttaakkee has joined the channel
haskell-mode が、emacsでのsyntax highlightに使われているものなのですね、有難うございます!
助かりました、この中を見ていきます:+1:
https://hackage.haskell.org/package/base-4.10.1.0/docs/Data-Type-Equality.html:~: って何に使うのでしょうか?どうやって使うのでしょうか?¿ :sob::innocent::sob::oden:
通常のHaskellプログラミングの範囲ではあまり使用する用途はないと思います.この定義自体はとても単純なので GADTs が分かっていれば https://hackage.haskell.org/package/base-4.10.1.0/docs/Data-Type-Equality.html#t::-126-: の定義そのままの意味を持ちます(つまり, Refl :: a ~ b => a :~: b という唯一のコンストラクタを持ちます). 単純に考えると, a :~: b という型を持つ値があるならば(ボトムを考えなければ) a ~ b という命題が真にになります.
2つの型が等しいという情報から何らかの実行時リフレクションをしたい場合や型レベルのプログラミングをしたい場合などに役に立ちます(等しいかどうかという情報は非常に重要なので標準の範囲に用意されていますが,型制約についてより汎用的なリフレクションを行いたいなら https://hackage.haskell.org/package/constraints-0.9.1/docs/Data-Constraint.html#t:Dict などもあるのでそれを使うと良いと思います. a :~: bDict (a ~ b) と同じです)
なお,1つの主な用途としては,下の方にある https://hackage.haskell.org/package/base-4.10.1.0/docs/Data-Type-Equality.html#t:TestEquality があり,実行時表現の同値性を使用したリフレクションなどがあります(2つの値があった場合に同じ表現(型)として扱っていいかを実行時に判断する)
ついでに,GHCの内部よりの話としての詳細は https://github.com/ghc/ghc/blob/fe6848f544c2a14086bcef388c46f4070c22d287/compiler/prelude/TysPrim.hs#L581
に載っているので,もしリフレクションなどの応用的な話ではなく,GHCの内部的な話に興味があるのでしたら,こちらを読んでみるのがいいと思います.
そのものではないのですが、同じ形の型 Is がmachinesパッケージで定義されていて、ストリームの入力を指定する手段として使用されています https://hackage.haskell.org/package/machines-0.6.3/docs/Data-Machine-Process.html
ありがとうございます:sob::sob:
まだあまりよくわかっていないのですが、GHCiで :t Refl とやると Refl :: a :~: a と出てくるのですが、 Refl :: a ~ b => a :~: b はどうしてわかるのでしょうか?:scream_cat:
FFI を Haskell 2010 で使うときは ForeignFunctionInterface プラグマを指定する必要はなくなったんでしたっけ?
Haskell 98 には FFI の話はなく、Haskell 2010 では FFI が記載されてますね。
ちなみに、Haskell 2010のサポートはGHC 7.0.1から。
あ!GADTsが全くわかってませんでした:sob::scream_cat:
勉強してみます:sob::writing_hand:
GADTsに関しては、 http://dev.stephendiehl.com/hask/#gadts-1 が良い導入になっていると思います
とりあえずGHCは 7.2.1 から ForeignFunctionInterface が enabled by default になっているようです https://downloads.haskell.org/~ghc/7.2.1/docs/html/users_guide/ffi.html
おおーありがとうございます:heart_eyes::sob:
Refl は reflexivity の略ですか?symやtrans はどのように使うの関数なのでしょうか?:oden:
これですね
https://ja.wikipedia.org/wiki/%E5%90%8C%E5%80%A4%E9%96%A2%E4%BF%82#.E5.AE.9A.E7.BE.A9
それぞれ Refl(反射律/reflexivity),sym(対称律/symmetric),trans(推移律/transitive)を表しています.つまり,同値関係の基本的な公理となる関数ですね.
@slacknowledge has joined the channel
Hello. I am slacknowledge bot.
When a thread is added a :memo: (memo) reaction, I will save it.
Everyone can view the saved thread at https://slacknowledge.pig-brewing.com .
質問です :raising_hand:
[0, 1, 1, 0, 0, 1, 0, … みたいな0と1のリスト(もしくは Array Word32 Word8 とか) があった時にこれをビット列とみなしてByteStringに変換する簡単な方法 or 便利な関数ってありませんか?
8個ずつchunksして2のn乗を掛けて足してWord8にしてpackするのは思いついたんですが…
このチャンネルでの知見を漁るのが結構大変だなと思い、slack上で行われたQ&Aを保存して検索しやすくするためのbotを作ってみました。
:memo: が付けられたスレッドを保存します。
もしよければ使ってみて下さい:grinning:

このbotに関する問題などあれば私に教えて下さい:bow:
おー、ありがとうございます。
Bool の Array って、ワードでなく、ちゃんとビットで表現されてませんでしたっけ?
Windowsの質問ですが、Cのヘッダで32ビットか64ビットか判断する方法はありませんか?
_WIN64とか _WIN32とかのcompiler predefinedマクロに頼らずにってことですか?
あ、`_WIN64` ってあるんですね。やってみます。
うぉー。できた。ありがとうございます!