haskell-jp / beginners #11

なんか最近そのへんが少し変わる(変わった?)という噂も https://github.com/haskell/cabal/issues/6481
windows上のstackでhmatrixを使おうとしています。`stack install --flag hmatrix:openblas`でインストールしpackage.yamlのdependenciesにhmatrixを追加したら、`stack build`は通るのに`stack ghci`すると途中で落ちてしまいます。
OS:windows10
stackのresolver:lts-16.15

↓`stack ghci --ghci-options -v`の出力末尾↓
(前略)
Loading package primitive-0.7.0.1 ... linking ... done.
Loading package vector-0.12.1.2 ... linking ... done.
Loading package hmatrix-0.20.0.0 ...
PS (ディレクトリ名)>

↓package.yamlの一部↓
extra-include-dirs:
- C:\OpenBLAS\include

extra-lib-dirs:
- C:\OpenBLAS\bin
- C:\OpenBLAS\lib
- (略)\stack\x86_64-windows\msys2-20180531\usr\lib\gcc\x86_64-pc-msys\9.3.0
- (略)\stack\x86_64-windows\msys2-20180531\mingw64\bin

ぐちゃぐちゃやっている間に原因もわからず自決してしまいました(正しい方法もわからないままなので申し訳ないです)。具体的には package.yamlの該当部分を
flags:
  hmatrix:
    openblas: true

extra-include-dirs: []

extra-lib-dirs:
- C:\libs

のように書き換えて、C:\libs 内にanacondaでインストールしてコピーした以下のファイル
libgcc_s_seh-1.dll
libgfortran.dll
libgfortran-3.dll
libopenblas.dll
libquadmath-0.dll

を配置したらghciも動作しました
よかった :relieved:
ところでpackage.yamlといっているのはstack.yamlのことですよね...?
あ゙…(修正しました)
@gen17 has joined the channel
はじめまして!Haskellを最近始めました!
$ stack new project で新しくプロジェクトを始めた際の質問です!
新しく作ったプロジェクトではどのようにテストを書くのが良いのですか?
テストのフレームワーク(何がデファクトスタンダードなのでしょうか?)、ユニットテストの方法( Spec.hs の中に import Lib と書いてて、`Lib.hs` に書いた関数をテストすれば良い?)について教えていただけると助かります!
はじめまして!
最近の実践的な良いテスト方法は、他の人々のお薦めを待ちますが、個人的には、以下のWebなどを参考にしていました。
https://haskell.e-bigmoon.com/stack/test/index.html
https://haskell.e-bigmoon.com/stack/test/doctest.html
https://kazu-yamamoto.hatenablog.jp/entry/20121205/1354692144
他の人の、お薦めをお待ちします:slightly_smiling_face:
(二ヶ月間これを知らなくて「Ctrl+Cしたのに落ちない…」って言いながら毎回ターミナルを再起動していたのは秘密)
https://haskell-jp.slack.com/archives/CR2TETE5R/p1576308562002700?thread_ts=1576308358.002600&cid=CR2TETE5R
agehara_hiroshi
@agehara_hiroshi has joined the channel
Reminder:
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
その記事から特に大きな変化はないっす
@mds_boy has joined the channel
Toshinori Takahashi
@Toshinori Takahashi has joined the channel
@ has joined the channel
@ has joined the channel
@Jens Petersen has joined the channel
@たけのこ has joined the channel
Viktor Kronvall
@Viktor Kronvall has joined the channel
@Jonas has joined the channel
@sh1ma has joined the channel
@ has joined the channel
回答ありがとうございます。別の問題が出てきて、挙げていただいた方法を試すところにたどり着けない状況です。すみません。
Haskellでスマートフォンアプリのバックエンドの開発を考えています。
ウェブフレームワークがいくつかあるみたい(Yesod, servant..など?他にもある?)ですがどのように選べばよいかご教授願えないでしょうか?
@ has joined the channel
takino takayuki
@takino takayuki has joined the channel
こんにちは〜!初発言, 初質問です!
haskellの型クラスをpythonでいうところの抽象基底クラスのようなもの?だと考えました〜
(途中で送ってしまった)
型クラスに実装を書いている例をたまに見かけますが、不適切な実装なのでしょうか?(最小の実装であっても、型だけ定義して実装は定義しないべきか否か)
型クラスに実装を書いている例、というのはこういうの :point_down: ですか?
class Hoge a where
  hoge x = "implementation!"

これのことだとすると、結論から言うと全く問題ないです。
(すみません、どう理由を説明しようかちょっとまだ考え中です。取り急ぎの回答として)
ありがとうございます!例の通りで問題ないです

実はこの質問をした後、他のコミュニティでも聞いてみたのですが、「Eq型クラスの様に、片方の実装(==,/=いずれか)のみを書くことでもう片方も実装されるなどのメリットから、デフォルト実装を置くのは問題ない」という回答をもらいました!

どうやら自分の中で「抽象に実装を書くのは良くないことだ」という固定観念があり、それで今回の様な質問になってしまいました…

何か他に理由として挙げられるものがありましたら、ぜひ教えていただきたいです!

改めてありがとうございます!
ありがとうございます!参考になりました!
他の言語のinterfaceとかだとそうなのかもしれませんね…
でもJavaのinterfaceでも最近はdefaultとかありますしそんな悪い気は私はしていませんね
汎用的に他の型クラスの関数を組み合わせて実装出来るけど特定のデータ構造の場合他のアルゴリズムを使った方が効率が良い場合にデフォルト実装を提供しておくみたいな使いみちもありますし…
あえて良くない理由を考えてはみたのですがそもそも思いつきませんね…何を最小実装すれば良いのか即座にわからなくなるぐらいでしょうか
多分、「haskellの型クラスをpythonでいうところの抽象基底クラスのようなもの」と考えたところがこの疑問の根っこだとすると、Pythonなどの抽象基底クラスの場合、具象クラスは一つのクラスしか継承できないので基底クラスが実装を持っていると柔軟性がなくなるところに問題があるのではないかと思います。Pythonにはぴったり該当するものがあっても(イテレータープロトコルとかそれらしき規約はありますが)キーワードとしては存在しないんですよねぇ :disappointed_relieved:

そんなわけでPythonにはなくてわかりづらいですが、型クラスはあくまでも他の言語で言うところのinterfaceのようなものなので、一つの方が複数の型クラスを実装しても問題がないですし、同じ名前のメソッドを実装してしまって衝突する、なんてこともありません。名前の衝突はモジュールが扱う問題なので
@ has joined the channel
@lagenorhynque has joined the channel
@ has joined the channel
@nakana has joined the channel
@takuma okada has joined the channel
@suotani has joined the channel
@taka2 has joined the channel
@ has joined the channel
Reminder:
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
@kazyasui has joined the channel
@shintak has joined the channel
@ has joined the channel
@ has joined the channel
@ has joined the channel
@yuki2501 has joined the channel