Ну как я это вижу: есть типа Fractional, есть Floating. Floating < Fractional. То есть апнуться к более общему типу мы можем (из Floating до Fractional). Но я ведь функцией realToFrac получаю Fractional. Как я из более общего типа могу получить свойства более узкого — неясно
class Fractional a => Floating a
или на привычном языке математики значок будет смотреть наоборот
∀ a. Floating a => Fractional a
Floating ⊆ Fractional
но потом мы говорим не про типы, а про функцию, параметризованную этими типами, например,
realToFrac pi :: ∀ (b :: Type). Fractional b => b
она принимает параметр (b :: Type). она может принять Fractional, следовательно, может принять что угодно внутри Fractional, например, Floating