I have a very innocent looking code
data Config = Config { cInts :: [Int] , cStrings :: [String] } instance Semigroup Config where c1 <> c2 = Config { cInts = andCombiner cInts , cStrings = andCombiner cStrings } where andCombiner field = field c1 <> field c2
It compiles and works fine. However, if I add the extension TypeFamilies or GADTs , I see a very strange error:
.../Main.hs:19:22: error: • Couldn't match type 'Int' with '[Char]' Expected type: [String] Actual type: [Int] • In the 'cStrings' field of a record In the expression: Config {cInts = andCombiner cInts, cStrings = andCombiner cStrings} In an equation for '<>': c1 <> c2 = Config {cInts = andCombiner cInts, cStrings = andCombiner cStrings} where andCombiner field = field c1 <> field c2 | 19 | , cStrings = andCombiner cStrings } | ^^^^^^^^^^^^^^^^^^^^ .../Main.hs:19:34: error: • Couldn't match type '[Char]' with 'Int' Expected type: Config -> [Int] Actual type: Config -> [String] • In the first argument of 'andCombiner', namely 'cStrings' In the 'cStrings' field of a record In the expression: Config {cInts = andCombiner cInts, cStrings = andCombiner cStrings} | 19 | , cStrings = andCombiner cStrings } | ^^^^^^^^
What is the cause of this compiler error?
type-inference haskell gadt type-families
vrom911
source share