as_capabl
cabalで、わりとクリティカルなのに謎のTest failureでマージされず、投げた本人も放置したまま一年が経過したPRがあるんですが、たとえばこれを私が引き継ぐといったような事は可能なんでしょうかね https://github.com/haskell/cabal/pull/6103
instance C String -- NG -- instance C [Char] -- OK instance {- OVERLAPPABLE -} C [a]
RULES
プラグマみたいに)instance C [Char]
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 バージョンとか依存かな{-# LANGUAGE FlexibleInstances #-} class C a where testInst :: a -> Int instance C [a] where -- instance {-# OVERLAPPABLE #-} C [a] where -- (あとでこちらに変える; 手順(2)参照) testInst = const 1
{-# 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"
Cc: @phadej
を入れておくと、cabal主要開発者のOlegさんに伝わると思います。Fixes a bug in process creation on Windows (Issue #17926).access violation 直ってることになってますね
As no one has objected, let's move ahead with this proposal. GHC 8.12.1
shall henceforth be 9.0.1.
instance MonadFail (Either String)
にしたかったけど孤児インスタンスはライブラリー外に影響が出るので newtype でラップしただけ。Result
と実質同じ。CatchT
で代替するけどControl.Monad.Catch.Pure.Catch
で事足りるのでは?感もしてきました(ウッcabal test --test-show-details=direct
すると色がつくと思います。