Как попросить GHCI объяснить, почему следующее:Может ли GHCI использоваться для объяснения принуждений?
*Lib> sum Nothing
0
Даже компилирует? Был ли какой-то Monoid
? Это не подпись!
*Lib> :i Foldable
class Foldable (t :: * -> *) where
...
maximum :: Ord a => t a -> a
minimum :: Ord a => t a -> a
sum :: Num a => t a -> a
product :: Num a => t a -> a
-- Defined in ‘Data.Foldable’
instance Foldable [] -- Defined in ‘Data.Foldable’
instance Foldable Maybe -- Defined in ‘Data.Foldable’
instance Foldable (Either a) -- Defined in ‘Data.Foldable’
instance Foldable ((,) a) -- Defined in ‘Data.Foldable’
*Lib> :i Num
class Num a where
(+) :: a -> a -> a
(-) :: a -> a -> a
(*) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
-- Defined in ‘GHC.Num’
instance Num Word -- Defined in ‘GHC.Num’
instance Num Integer -- Defined in ‘GHC.Num’
instance Num Int -- Defined in ‘GHC.Num’
instance Num Float -- Defined in ‘GHC.Float’
instance Num Double -- Defined in ‘GHC.Float’
*Lib> sum Nothing
0
Я не могу ответить на ваш вопрос об интроспекции, но я могу указать, что [это] (https://hackage.haskell.org/package/base-4.8.1.0/docs/src/Data.Foldable.html # строка-218) является причиной вашего базового вопроса :) – hobbs
(и на самом деле выведенный вывод ': i' говорит:« Экземпляры сложенные, возможно, определены в «Data.Foldable». Это плюс проверка «ничего» на что это «Может быть» (если вы этого еще не знали) выполняет эту работу?) – hobbs
Почему бы вам просто не увидеть тип 'sum', используя': t sum'. Он укажет, что у него должен быть экземпляр «Складной», и все, что у вас есть, это экземпляр 'Maybe' для' Foldable'. – Sibi