IK
Size: a a a
IK
DM
class Cls (name :: Symbol) where
f :: String
instance (IsEmpty name ~ flag, Cls' flag name) => Cls name where
f = f' @flag @name (Proxy :: Proxy flag)
class Cls' (flag :: Bool) (name :: Symbol) where
f' :: Proxy flag -> String
instance Cls' 'True name where
f' _ = "empty symbol"
instance Cls' 'False anyName where
f' _ = "any symbol"
type family (IsEmpty (a :: Symbol)) :: Bool where
IsEmpty "" = 'True
IsEmpty _ = 'False
main :: IO ()
main = do
let s = ""
let someSymb = someSymbolVal s
case someSymb of
(SomeSymbol (p :: Proxy w)) -> putStrLn $ f @w
f @w ругается на • Could not deduce (Cls' (IsEmpty n) n) arising from a use of ‘f’
from the context: KnownSymbol n
IsEmpty w в компайл-тайме?DM
Known в KnownNat , KnownSymbol и тд?DM
DM
w же есть KnownSymbolDM
DM