2
は私が書いたコード:Haskellのタイプの問題
{-# 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
をしかし、それはエラーに実行されます。
‘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.
任意のアイデアなぜですか?
エラーメッセージは非常に明確である: 'Int'は、パラメータなしのタイプですが、あなたは1つにそれを適用しようとしました。私はあなたが実際に 'mempty ':: Intを意味すると思います。 mappend ':: Int - > Int - > Int'を参照してください。 –
'mempty ':: Int a => a'と' mappend' :: Int a => a - > a - > a'の行を省略するとどうなりますか? –
@JJHakalaそれでは、パラメータ( 'mappend '1 2')で関数を使うことはできません:' it'_の使用から生じる(Num a0)のインスタンスはありません – barbara