小さい例(解決)

{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FunctionalDependencies #-}

class Nons nons_a nons_b | nons_a -> nons_b where
    type Ty1 nons_a nons_b
    nons :: nons_a -> Ty1 nons_a nons_b -> Int

instance Nons Int Int where
    type Ty1 Int Int = String
    nons (a :: Int) (b :: Ty1 Int Int) = undefined
        where
          f :: forall nons_b.(Nons String nons_b) => Ty1 String nons_b -> Int
          f v = nons "str" v

fundeps使えば大丈夫だけれども、付けてなかったら死ぬっていうソレでした。