haskell-jp / random #77

cabalで、わりとクリティカルなのに謎のTest failureでマージされず、投げた本人も放置したまま一年が経過したPRがあるんですが、たとえばこれを私が引き継ぐといったような事は可能なんでしょうかね https://github.com/haskell/cabal/pull/6103
「クリティカル」というのは私の主観なのですが、
cabalはバージョン3系列でv2-***のコマンドがデフォルトになった訳で、
だとするとこの件のように「v1では出来たけどv2では出来ない」みたいなものがあると、
それはregressionという扱いになってマズいんじゃねーの、と個人的には思っていて、
なのに特に界隈で問題になっている様子もないので何だかなーと思っている所です
引き継いで別途 PR 作るのは構わない気がします
PR 作ったものの拒否されるのが嫌ならば事前にネゴっておく必要があると思いますが
別話題ですが、型別名っていつでも相互に入れ替えができると思っていたんですがそういうわけじゃないんですね(type synonym instances の前提)
型クラスの解決に影響を与えるみたい
instance C String -- NG
-- instance C [Char] -- OK
instance {- OVERLAPPABLE -} C [a]
めっちゃ便利そう。Haskellのソースコード一括置換ツール。書き換えの規則を等式で表現できる( RULES プラグマみたいに)
https://engineering.fb.com/open-source/retrie/
TypeSynonymInstancesを有効にしていようといまいと
instance C [Char]

にはFlexibleInstancesが必要なのでは。
そしてもちろんFlexibleInstancesを有効にしてれば[Char]でもStringでも問題ない
flexible instances も有効でした
String だと ↓ のエラーが出るんですが [Char] だと出なかったんですよね
    . Overlapping instances for FromRecord String
        arising from a use of `runQuery''
      Matching instances:
        instance FromRecord String
          -- Defined in `postgresql-pure-0.1.3.0:Database.PostgreSQL.Pure.Internal.Parser'
        instance postgresql-pure-0.1.3.0:Database.PostgreSQL.Pure.Internal.Data.FromField
                   a =>
                 FromRecord [a]
          -- Defined in `postgresql-pure-0.1.3.0:Database.PostgreSQL.Pure.Internal.Parser'
うーん、普通に単純な例を手元で試した限り問題なかったので、バグか、 Overlappable の仕様じゃないっすかね... :confused:
あ、使用するコードも書いてみました?定義する分には問題がなく解決時に問題になるので
とりあえず OVERLAPPABBLE する限り問題なさそう
{-# LANGUAGE FlexibleInstances #-}

class Hoge a where
  hoge :: a -> a

instance Hoge String where
  hoge = id

instance {-# OVERLAPPABLE #-} Hoge [a] where
  hoge = id

main :: IO ()
main = print $ hoge "a"

書いてて気づいたんですけど、 {-# OVERLAPPABLE #-} ではなく`{- OVERLAPPABLE -}` となっているのは問題のコードでも、ですか?
ギクッと思ったがちゃんと {-# #-} でした…… GHC バージョンとか依存かな
なんか再現しなくなった:fearful: あれぇ?確かに昨日はウンウン悩んでたんだけどなぁ
同じ現象かかりませんが、自分も overlapping instances ではまったことがあります。
上記と見かけ上同じようなことが以下の手順で再現できます。

Lib.hs
{-# LANGUAGE FlexibleInstances #-}

class C a where
  testInst :: a -> Int

instance C [a] where
-- instance {-# OVERLAPPABLE #-} C [a] where -- (あとでこちらに変える; 手順(2)参照)
  testInst = const 1


Main.hs
{-# LANGUAGE FlexibleInstances #-}
module Main where
import Lib

instance C [Char] where
  testInst = const 2
-- instance C String where -- (あとでこちらに変える; 手順(3)参照)
--   testInst = const 3

main :: IO ()
main = putStrLn $ show $ testInst "a"



(0) cabal clean

(1) ↑の状態で cabal run
→ Overlapping instances for C [Char]

(2) Lib のみ修正し {-# OVERLAPPABLE #} を追加し、cabal run
→ OK
→ 2

(3) Main のみ修正して C String に変えて、cabal run
→ Overlapping instances for C [Char]


どうも、手順(2) で Lib.o のみ更新され Lib.hi ファイルが更新されないのと関係があるようです。
((2)の OVERLAPPABLE の効果が(3)で効かない)
手順(3) のあと Lib.hi を消してcabal runするとビルドが通り3が表示されます。
手元にある発見時の.cabalではbaseが4.11となっているので、だいぶ前からの挙動のようです。
(何度もごちゃごちゃしてすみません。)
おあー、動的ビルド絡みですか。なるほど~。
GitHubのissue上で状況を聞いてみると良いかと思います。 issueが多くて埋もれてるのかもしれませんね。
Cc: @phadej を入れておくと、cabal主要開発者のOlegさんに伝わると思います。
HDBC への変換をかまさず relational-record のバックに postgresql-pure を使うライブラリーをリリースした
http://hackage.haskell.org/package/relational-query-postgresql-pure
generic 力が足りなくて手動インスタンスを書かないといけないので「import だけ書き換えれば」というわけにはいきませんが、そのうち自動生成したい
ICFP 2020、keynote speakerがめっちゃ著名人でやばい :open_mouth:
https://haskell-jp.slack.com/archives/C4NDY2TF1/p1594768739027800
:tada: GHC 8.8.4がリリースされました。マイナーアップデートなのでバグ修正が中心なはず https://downloads.haskell.org/ghc/8.8.4/docs/html/users_guide/8.8.4-notes.html
:memo: TODO: 私が見たaccess violationも直っているかもなので次回のHaskell-jpもくもく会はhaskell-language-serverのビルドに再挑戦かなー
(せっかく`foldl'`使ったのにbangを付け忘れてメモリの消費量が爆上げになったでござる…… )
:checkered_flag: GHC 8.12からWindows向けのI/Oマネージャーが刷新されるそうです。内部のAPIを使っている場合一部非互換になってしまうのでその手のライブラリー作者は注意せよ、とのこと。
http://haskell.1045720.n5.nabble.com/New-Windows-I-O-manager-in-GHC-8-12-td5897433.html
Redditなどから、いくつかです。

その1: Haskell Language Server の近況レポートです。 バイナリ提供も含め邁進中。
Haskell Language Server 0.2.0
https://mpickering.github.io/ide/index.html

その2: GHC 8.12向けのbranchが切られました。 名称は9.0になるかも。
GHC 8.12の概略日程はこちら(GHC 8.8.4 と GHC 8.10.2 との並走で重たそう)
https://gitlab.haskell.org/ghc/ghc/-/wikis/status/ghc-8.12.1
branchはここ(ちょうどwinioまで入りました)
https://gitlab.haskell.org/ghc/ghc/-/commits/ghc-8.12
9.0の名前の話はここ
https://mail.haskell.org/pipermail/ghc-devs/2020-July/019055.html
バイナリ提供ありがたい
Fixes a bug in process creation on Windows (Issue #17926).
access violation 直ってることになってますね
> * Control aborts Ctrl+C should be a bit more reliable.
やったぜ
今haskell-language-serverのビルド試したけど、floskellはやっぱビルドできなかった... :cry:
そういえば手元に floskell 依存をなくした HLS があります
Haskell Love Conference への参加登録手続きが始まっています。
Haskell Love Conference は、7/31 – 8/1 にオンラインで行われるconferenceです。
初モノなので、雰囲気や良し悪しは正直わからないのですが、講演者とスポンサーを見る限り大丈夫そうかなと思ってます。
参加費は無料で、eventbriteのシステムを使って、フリーのチケットを入手する手続きです。

Redditへの案内はこちら。
https://www.reddit.com/r/haskell/comments/humznn/haskell_love_conference_registration_is_open/

Haskell Love Conference のホームはこちら。
https://haskell.love/
@imura has joined the channel
面白そう(まで読んでません) https://free.cofree.io/2020/07/20/perform-io/
「accursed unutterable」は「呪いがかかっていて筆舌に尽くしがたい」といったところか
@henri.saks.math has joined the channel
Ben Gamariさんも仰ったことですし、GHC 8.12はGHC 9.0になることが決まったようです。
http://haskell.1045720.n5.nabble.com/GHC-9-0-td5897435.html#a5897499
As no one has objected, let's move ahead with this proposal. GHC 8.12.1
shall henceforth be 9.0.1.
気が早いですが、依存型の主要機能が出揃う頃に、GHC 10.0になる方向です:keycap_ten:
依存型、進捗どうなんでしょうね。いろいろ壁があってまだまだ大変そうだなー、ぐらいに思ってましたが :thinking_face:
ghc-proposalsに依存型の関連提案が並行して進んでるらしいですが、状況は把握できてないです、どんな感じでしょうね。
依存型の主開発者のRichardさんが、線形型のコードレビューの方でしばらく重たかったのかなぁ、と思います:haskell:
こちらでも共有。
VS Codeでの、Haskell Language Serverの静的バイナリの、自動インストールのデモ画面です。(私は未使用です)
使用しているGHCのバージョンに合わせたバイナリが、自動でダウンロード&インストールされます。 すごい、着々とここまで来ましたね。
https://twitter.com/meeple_/status/1286046745076670465
小粒なパッケージをリリースした。
instance MonadFail (Either String) にしたかったけど孤児インスタンスはライブラリー外に影響が出るので newtype でラップしただけ。
それにいくつか関数をセットにしたもの。
aeson の Result と実質同じ。
https://hackage.haskell.org/package/either-result-0.1.0.0
このリプ書いて気づいたんですがMonad Transformer版がちょっと欲しい...(とりあえずリプのとおり CatchT で代替するけど
https://twitter.com/igrep/status/1287299746059579392
それはちょっと思ってました(当面自分的需要がなかったので見なかったことにしていた
コンストラクタが隠蔽されているのは意図的なものでしょうか?コンストラクタがないとcoercionが通らない(DerivingViaなども使えなくなる)などの難点が生じます
@fumievalお、その辺り無知です。簡単な解説か解説へのリンクなどがあれば教えてほしいです。
あと Control.Monad.Catch.Pure.Catch で事足りるのでは?感もしてきました(ウッ
https://twitter.com/kakkun61/status/1287317088592330752
たった今めっちゃ欲しい案件が出てきたw
https://twitter.com/igrep/status/1287361576790396929
メモリ2GByteのUbuntu18.04 PCに vscodeとHLSを入れてみました。軽快に動きました。
普段はVimを使っていて、IDEにどういうものが求められているのかを理解していないのですが、補完とか型の表示とかHaddockとのリンクとか良い感じです。
HLSのダウンロードは全自動ですし、思った以上に動作が軽くて驚きました。
バージョンが進んでいけば、良い感じになりそうですね:haskell:
cabal test 経由で hspec 実行すると色が着かないので悲しい
どうやら公式ドキュメントには載っていないようですが、 cabal test --test-show-details=direct すると色がつくと思います。
お、色着きました!ありがとうございます