fork(1) download
  1. {-# LANGUAGE ExistentialQuantification #-}
  2.  
  3. import Data.List
  4.  
  5. class ЭтоЗверюшка a where
  6. погладить :: a -> IO ()
  7. числоНог :: a -> Int
  8.  
  9. data Котик = Котик
  10. instance ЭтоЗверюшка Котик where
  11. погладить _ = putStrLn "мурр"
  12. числоНог _ = 4
  13.  
  14. data Пёсик = Пёсик Int
  15. instance ЭтоЗверюшка Пёсик where
  16. погладить (Пёсик возраст) = putStrLn $ intercalate "-" $ replicate возраст "гав"
  17. числоНог _ = 4
  18.  
  19. data Зверюшка = forall a . ЭтоЗверюшка a => Зверюшка a
  20. instance ЭтоЗверюшка Зверюшка where
  21. погладить (Зверюшка a) = погладить a
  22. числоНог (Зверюшка a) = числоНог a
  23.  
  24. main = mapM_ погладить [Зверюшка (Пёсик 1), Зверюшка Котик, Зверюшка (Пёсик 3)]
Success #stdin #stdout 0s 4556KB
stdin
Standard input is empty
stdout
гав
мурр
гав-гав-гав