:t error
показывает,Поймите возвращаемого значение функции ошибок Типа
error :: [Char] -> a
Чтобы понять, что тип а, я написал этот тестовый код,
import Data.Typeable
custom = error "hello how are you"
main = do
let a = custom
putStrLn $ show (typeOf a)
Он получает возвращаемое значение error
функции в и пытается распечатать его, используя функцию show
. Он бросает ошибку, как,
ab.hs:6:20:
No instance for (Typeable a0) arising from a use of ‘typeOf’
The type variable ‘a0’ is ambiguous
Note: there are several potential instances:
instance [overlap ok] Typeable()
-- Defined in ‘Data.Typeable.Internal’
instance [overlap ok] Typeable Bool
-- Defined in ‘Data.Typeable.Internal’
instance [overlap ok] Typeable Char
-- Defined in ‘Data.Typeable.Internal’
...plus 14 others
Как я могу сделать typeOf
для переменной и распечатать его в виде строки?
'typeOf' и связанный с ним класс' Typeable' пытается сделать * особенно * уверенным, что он может применяться только тогда, когда тип полностью известен, потому что для конверсий 'Typeable' необходимо быть безопасным. Некоторые тонкие лазейки в этом были закрыты в недавних GHC. –