haskell-jp / questions #75

一例を挙げます。
環境: stack を使っています。それによって GHC 8.6.5, cabal 2.4.0.1 が使われています。 cabal-install はちょっとわかりません。
cabal ファイル: https://github.com/Hexirp/hexirp-hakyll/blob/e6b28eaf95031baf6193c8bd4bb652eefa31f70b/hexyll/hexyll.cabal
ログ (on Travis CI): https://travis-ci.org/Hexirp/hexirp-hakyll/builds/614356184
https://github.com/haskell/cabal/issues/5022 曰くパッケージそのもののバージョンではなく依存パッケージのバージョンのことを言っている可能性もありますね... でもぱっと見おかしなところがわからない。 :confused:
この変更から hexyll に関する Cabal file warning ***.cabal@0:0: version with tags というエラーがなくなっているようなのですが、手掛かりになりますでしょうか
https://github.com/Hexirp/hexirp-hakyll/commit/2f857cd001109d7587ab4e82f8f15e40d5c746aa
もしかしてライセンスの GPL-3-or-later という指定が原因……?
cabal がバージョンとライセンスに同じ処理をかけていたりしているかもしれないですね
確かに、cabalはどっかのバージョンでLICENCEで使用できる値を変えたのでそれが関係しているかも知れません
PotassiumIodide
@PotassiumIodide has joined the channel
@monoid911 has joined the channel
hpack に移行したら GPL-3.0-or-later と license に書いてもエラーが出なくなりました。 cabal へ変換した後の内容は前と同じはずなのに……
@池永 has joined the channel
cabal-version がファイルの先頭にない場合、旧バージョンのファイルとして前処理されます。 SPDX の式が書けるのは、新バージョンからなはずです。詳しく見てないので断言できませんが、それが関係してる気がしますね
hpack はその仕様が出来てから cabal-version を最初に吐き出すようになったはずですね
Oh… 適当を言うのはやっぱだめですね.手元で試せる環境ができたので試しましたが,まず cabal は 1.2 からファイル仕様に関してバージョン指定ができ,どのファイル仕様を使うか cabal-version で指定できるようになりました.で, cabal-version: x.y と指定するのが普通ですが,
cabal-version: >=1.10
cabal-version: >=2.0
だけ特別扱いされ,それぞれ 1.12 の形式と 2.0 の形式が選ばれます.

で, 2.2 の形式から license に書ける式が変わっており,旧来は cabal 独自の形式だったのが SPDX expression で指定するようになりました.
独自の形式の AST は, http://hackage.haskell.org/package/Cabal-3.0.0.0/docs/Distribution-License.html#t:License で,見ての通り GPL はバージョンだけしか指定できず or-later は指定できません.それが警告として表示されていて, 「GPL のライセンス指定してるんだと思うけど書く形式間違ってるんじゃない?」と言ってるんだと思います.で, hpack は多分 cabal-version: 2.4 とかで出力してるので通ってるとかではないですかね?
その通りでした。 hpack による出力は cabal-version: 2.2 と一番最初の個所に書いてありました。詳細な回答ありがとうございます。
そうだと思います (僕が知った経緯は,たまたま cabal file の AST を最近いじろうと思ったことがあってっていうだけなので,本当にそのドキュメントを読むだけで良いかはちょっと自信ないですが)
(現状, cabal の仕様は複雑になっていく一方なんですが,エラーメッセージはかなり不親切で cabal user guide もあまり網羅性がないので,置いてけぼり食ってるユーザかなりいそうな気がするんですよね…)
エラーメッセージが不親切なのは、現に私はこの問題を最初はパッケージのバージョンに関する問題だと勘違いしてしまったわけで、かなり問題そうですね。
@ has joined the channel
@matsushita has joined the channel
@HiB has joined the channel
AppVeyorで choco install -y ghc --version 8.8.1 すると[NuGet] The operation has timed outと言われてしまうのですがどうしたらよいかわかる人いませんか?`--timeout 0`でタイムアウトを無効にしても直りませんでした。
https://ci.appveyor.com/project/maoe/threadscope-3cf8u/builds/29216836/job/jadrm74fdjigwlqq
おーなるほど。ありがとうございます。
@Yuki Takao has joined the channel
@ has joined the channel
@tmt has joined the channel
はじめまして。初歩的な質問で恐縮いたしますが、、、
この MyInteger の型クラスインスタンスの実装だと MyInteger と Integer が同一の型として扱われるようになっちゃうんですがなぜなんでしょうか?
newtype MyInteger = MyInteger { getInteger :: Integer } deriving (Eq, Show)

instance Num MyInteger where
  fromInteger = MyInteger
  x + y       = MyInteger $ getInteger x + getInteger y
  x - y       = MyInteger $ getInteger x - getInteger y
  x * y       = MyInteger $ getInteger x * getInteger y
  abs x       = if getInteger x < 0 then x * (-x) else x
  signum x    = if getInteger x < 0 then -1 else 1

-- え?
ghci>MyInteger 1 + 1
MyInteger {getInteger = 2}

ghci>MyInteger 1 == 1
True
Haskellの整数値リテラルは Num a => a という型とみなされるので、
> :t 1
1 :: Num p => p

MyInteger はNumのインスタンスになっているので == の右辺にある 1 は MyInteger と認識されているはずです!
つまり
MyInteger 1 == 1


MyInteger 1 == fromInteger 1

と同じ挙動をしてます
おおー!そうなんですね!
理解しました!ありがとうございました:raised_hands:
@kaiko has joined the channel
@ has joined the channel
@sina has joined the channel
stack ghciで、開発しているパッケージと、それを使ったサンプルコードを同時に( :reload でリロードできるよう)読もうとして
stack ghci -- <パッケージ名>:lib サンプルコード.hs

と書いたのですが、
Cannot use 'stack ghci' with both file targets and package targets

というエラーが出てしまいます。
多分 サンプルコード.hs の方をパッケージのcabalファイルにおける executable なり test-suite なりに一時的にせよ書いてしまえばいいと思うのですが、他に良い方法はないでしょうか?
多分自己解決しました。一旦
stack ghci -- <パッケージ名>:lib でパッケージを読んだ後、 :add コマンドで`サンプルコード.hs` を追加するといいみたいです。 :add なんて便利なのがあったんですね。
面白い。 stack ghci-v オプション付きで実行してみたら
Run process: ghc-8.6.5.exe --interactive -ghci-script=C:\Users\igrep\AppData\Local\Temp\haskell-stack-ghci\0752026d\ghci-script

なんて出てきて(実際にはもっと長いコマンド)、
その C:\Users\igrep\AppData\Local\Temp\haskell-stack-ghci\0752026d\ghci-script を開いてみたら
:add 読み込んでいるパッケージのモジュール...
:module + 読み込んでいるパッケージのモジュール...

ってしてた。
要はどちらもひたすら :add してるだけってことか:sweat_smile:
@broccoli has joined the channel
@ has joined the channel
@kim chaegon has joined the channel
@Kibor has joined the channel
@Nicolas has joined the channel
@user has joined the channel
@SaishinInoue has joined the channel
@shingo suzuki has joined the channel
@ymdpharm has joined the channel
こんにちは。
HaskellからMariaDBを操作するにはどうしたらよいでしょうか。
ググって見たのですが、MySQLの情報はあっても
MariaDBの情報は見つけられませんでした。
参考になるサイトなどお分かりでしたらご教示頂きたく。
https://github.com/yesodweb/persistent
はドライバはMySQLという名前ですがMariaDBで使っている人が結構居るみたいですね
私はPostgreSQL派なので使ったことは無いのですが,
そのまま互換性のあるMariaDBでも動くのではないでしょうか