{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
module TypeCheck7_4_1 where

class C from to | from -> to where

instance C Float Char where
instance C Double Bool where


polyFoo :: (C from to) => from
polyFoo = undefined

polyBar ::
   (C fromA toA, C fromB toB) =>
   (toA -> toB) ->
   fromA -> fromB
polyBar = undefined


monoFoo :: Float
monoFoo = polyFoo

monoBar :: Double
monoBar = polyBar id monoFoo
