type CSat = () :: Constraint type CNSat = Int ~ Bool type family OfKind a b where OfKind a (b :: a) = CSat OfKind a (b :: m) = CNSat type family OfType a b where OfType a a = CSat OfType a b = CNSat
fu :: OfKind * t => t -> t fu = id _ = fu 0 -- Ok, Int is * _ = fu Either -- OK???? WUTTTT????!!!!!! Either is * -> * -> *
{-# LANGUAGE Ублюдок, мать твою, а ну иди сюда, говно собачье, решил на мне разрабатывать? Ты, засранец вонючий, мать твою, а? Ну иди сюда, попробуй меня прочитать, я тебя сам прочитаю, ублюдок, онанист чертов, будь ты проклят, иди идиот, трахать тебя и весь твой проект, говно собачье, жлоб вонючий, дерьмо, падла, попробуй вникни, мерзавец, негодяй, гад, иди сюда, ты — говно, хаскель! #-}