1. Куча / Говнокод #18716

    −11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    {-# LANGUAGE FunctionalDependencies #-}
    {-# LANGUAGE UndecidableInstances #-}
    {-# LANGUAGE FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, OverlappingInstances #-}
    
    class Filtering c a b where
      (/-) :: c -> [a] -> [b]
    
    class Containing a b | a -> b where
      getter :: a -> [b]
    instance (Containing a b, Containing b c) => Containing a c where
      getter l = getter l >>= getter
    
    instance Filtering (a -> Bool) a a where
      p /- l = filter p l
    instance (Filtering (a -> Bool) a a, Containing b a) => Filtering (a -> Bool) b b where
      p /- l = filter (not . null . filter p . getter) l
    instance (Filtering (c -> Bool) b b, Containing a b) => Filtering (c -> Bool) a b where
      p /- l = p /- (l >>= getter)
      
    data A = A { _ap :: Bool, _ab :: [B] } deriving (Show)
    instance Containing A B where
      getter = _ab
    
    data B = B { _bp :: Bool, _bc :: [C] } deriving (Show)
    instance Containing B C where
      getter = _bc
    
    data C = C { _cp :: Bool } deriving (Show)
    
    test = [ A True [B True [C False]]
           , A False [B True [C True, C False]]
           ]
    
    main = do print ((_cp /- test) :: [B])
              print ((_bp /- test) :: [A])
              print ((_cp /- test) :: [C])

    вы мечтали об операторах, жрущих любой тип a la PHP, в своём любимом статическом языке?
    всего пара расширений GHC, и они уже в вашем проекте!

    Запостил: CHayT, 13 Сентября 2015

    Комментарии (5) RSS

    • I'm so glad that the ineenrtt allows free info like this!
      Ответить
    • A few years ago I'd have to pay someone for this <a href="http://xdlzhz.com">infoamrtion.</a>
      Ответить
    • Always the best content from these pruiigdoos writers. http://zyrqeyry.com [url=http://fkmmbbzylt.com]fkmmbbzylt[/url] [link=http://uqagabvbcyv.com]uqagabvbcyv[/link]
      Ответить
    • Finndig this post. It's just a big piece of luck for me. http://uqkqluwqgpe.com [url=http://zucgwtzq.com]zucgwtzq[/url] [link=http://sfciyvad.com]sfciyvad[/link]
      Ответить
    • Что сказать то хотел? Типа в листе разные типы?

      Олсо так лучше:
      https://ideone.com/VZwx44
      Ответить

    Добавить комментарий