type family
  Id a =
    result | result -> a
  where
  Id a =
    a

type family
  G
    (a :: k)
    b
    c =
    foo | foo -> k b
  where
  G a b c =
    (a, b)

type family
  F a ::
    * -> *
  where
  F Int = Double
  F Bool =
    Char
  F a = String

type family F a where
  F a -- foo
    =
    a
