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 すると色がつくと思います。