не подходят? Если надо просто выкинуть ошибку когда нет тайпинстанса достаточно такого
data V1
class V2
type family ForceWHNFImpl e t :: Constraint where
ForceWHNFImpl _ V1 = V2
ForceWHNFImpl _ _ = ()
type family ForceWHNF a where
ForceWHNF a = ForceWHNFImpl (TypeError ('Text "urky urk")) a
type family F x
f :: ForceWHNF (F x) => x -> x
f x = x
-- OK
type instance F Int = Int
p :: Int
p = f 1
-- • urky urk
-- • In the expression: f True
-- In an equation for ‘q’: q = f True
q :: Bool
q = f True
Или я не понял задачу?
эти программисты уже давно не об этом разговаривают
Обсуждают сегодня