2
Ich schrieb den Code:Haskell Typ Ausgabe
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE FlexibleInstances #-}
module MonoidApp where
class Monoid' a where
mempty' :: a
mappend' :: a -> a -> a
mconcat' :: [a] -> a
mconcat' = foldr mappend' mempty'
instance Monoid' Int where
mempty' :: Int a => a
mempty' = 0
mappend' :: Int a => a -> a -> a
mappend' a b = (+) a b
Aber es läuft in die Irre:
‘Int’ is applied to too many type arguments
In the type signature for ‘mempty'’: mempty' :: Int a => a
In the instance declaration for ‘Monoid' Int’
Failed, modules loaded: none.
Irgendwelche Ideen, warum?
Die Fehlermeldung ist ziemlich klar: 'Int' ein Typ ohne Parameter ist, aber Sie haben versucht, es zu beantragen. Ich vermute, du meinst eigentlich 'mempty' :: Int; Mappend ':: Int -> Int -> Int'. –
Was passiert, wenn Sie die Zeilen 'mempty ':: Int a => a' und' mappend ':: Int a => a -> a -> a' auslassen? –
@JJHakala Dann kann ich die Funktion mit Parameter ('mappend '1 2') nicht verwenden: _Keine Instanz für (Num a0) die sich aus einer Verwendung von' it'_ ergibt – barbara