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
же есть KnownSymbol
DM
DM