к
Size: a a a
DB
DB
R
-- >>> :t testGHC тайпчекает сигнатуру функции, но выдает ошибку при попытке спросить тип этой функции
-- <interactive>:1:1: error:
-- Couldn't match type ‘At 0 '[]’ with ‘"a"’
-- arising from a use of ‘test’
test :: (At 0 xs ~ "a", DeepSeq xs) => Proxy xs -> Proxy xs
test = id
-- >>> :t test
-- test :: Proxy '["a", "b"] -> Proxy '["a", "b"]
test :: (xs ~ ("a" ': "b" ': rest), DeepSeq xs) => Proxy xs -> Proxy xs
test = id
DB
runLoggerTDB
runLoggerT передается LogFunctionT который чет делает с IODB
YS
DB
YS
R
TrySpecializeAs идея позволяет делать какие-то совершенно магические штуки:-- >>> :t xsHasA
-- xsHasA :: Proxy ("a" : xs')
xsHasA :: "a" `Elem` xs => Proxy xs
xsHasA = Proxy
-- >>> :t xsHasB
-- xsHasB :: Proxy ("b" : xs')
xsHasB :: "b" `Elem` xs => Proxy xs
xsHasB = Proxy
-- >>> :t automaticallyReorderTypeVars
-- automaticallyReorderTypeVars :: [Proxy ("a" : "b" : xs')]
automaticallyReorderTypeVars = [xsHasA, xsHasB]
М