我想使用TypeError
约束使“非实例”产生更有意义的类型错误:
{-# LANGUAGE DataKinds, KindSignatures #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
import GHC.TypeLits
import Data.Proxy
class Compat (x :: Bool) (y :: Bool) where
combine :: Proxy x -> Proxy y -> Int
instance Compat False pre2 where
combine _ _ = 42
instance Compat True False where
combine _ _ = 1
instance (TypeError (Text "Meaningful error message goes here")) => Compat True True where
combine = _
在这个洞里,我想通过TypeError
约束消除来填充它,即使用我TypeError
在范围内有一个约束的事实来避免编写undefined
或error
类似的东西。
那可能吗?