小さい例(解決)
{-# 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使えば大丈夫だけれども、付けてなかったら死ぬっていうソレでした。