Когда я вхожу :t 4
в GHCI яПочему ghci выдает (Num a) => a для: t 4 и не (Ord a) => a?
Prelude> :t 4
4 :: Num t => t
Я понимаю, почему 4
не только Int или Integer, и что это infered снизу вверх, но я не понимаю, почему 4
не показан как Ord t => t
или даже более правильно что-то вроде этого:
4 :: (Ord t || Num t) => t
Поскольку 4
является одновременно Ord
и Num
но Ord
и Num
не имеют никакого отношения к ...
Так почему же :t 4
только выход Num
?
Это описано в [отчете haskell] (https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1360006.4.1) – Lee
Предположим, что я дал '4' тип' Ord t = > t'. Теперь я отмечаю, что 'Bool' является экземпляром' Ord'. Поэтому '4 :: Bool'. Если '4 :: Bool' будет' True' или 'False' и почему? –
@ Lee Btw, есть аналогичный вопрос о правилах по умолчанию для типа: https://stackoverflow.com/questions/39251728/ghci-randomio-type-inference Я попытался ответить на него и понять отчет, но до сих пор не имеет четкого представления. Возможно, более опытные пользователи _Haskell_ могут помочь :) – Shersh