Куча говна / Говнокод #12068 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
-- Подготовка
(.-) :: ot -> (ot -> rt) -> rt
object .- method = method object

to_string () self = show self

my_array = [1..]

-- ООП в действии
main = putStrLn( my_array.-take(10).-drop(5).-to_string() )

Хаскелл и ООП.

Запостил: Fai Fai, (Updated )

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

    • Мой массив!!!

      Добрался я таки до операторов, следующие в очереди - data, type, newtype.
      Ответить
  • object .- method = method object
    Не по феншую. Почуствуй силу каррирования, Fai.
    (.-) = flip ($)
    Ответить
    • >Почуствуй силу каррирования, Fai.
      Он ещё спит. Всю ночь учил Хаскел. По себе знаю.
      Ответить
    • Как ты посмел обозвать божественные монады хаскеля мондами... Повинен смерти!
      Ответить
    • До IO уже давно дочитал, до монад в общем недавно.

      Почему-то показалось, что это слишком просто.

      Единственное, хочу узнать, написан ли оператор do на самом хаскелле или он встроен, как например оператор "=".
      Ответить
      • > написан ли оператор do на самом хаскелле
        do это вообще сахарок для монадических операторов. Так что синтаксис встроен, а его алгоритм можешь написать ты сам, запилив свою монаду.
        Ответить
      • При разборе do нотации происходит вот такое преобразование: http://ideone.com/7AUWMg.

        P.S. Вроде бы все возможности do удалось показать в этом примере.
        Ответить
        • Очень красиво. ^_^

          А почему я не могу написать как-то так?
          class Named t where
                  name :: t -> String
          
          data Dog = Dog {name::String} deriving (Named)


          или

          class Named t where
                  name :: t -> String
          
          data Dog = Dog {name::String}
          
          instance Named Dog


          Ошибка
          Multiple declarations of `Main.name'
              Declared at:
          Ответить
          • Как-то так:
            class Named t where
                    name :: t -> String
            
            data Dog = Dog {name'::String}
            
            instance Named Dog
                name = name'

            http://ideone.com/V3Q9UJ
            Других способов пока не вижу. Метод должен быть описан именно в инстансе.
            Ответить
            • До этого способа я догадался. Только имхо тогда уж проще написать так:
              class Named t where
                      name :: t -> String
               
              data Dog = Dog String
               
              instance Named Dog where
                  name (Dog n) = n
              
              
              http://ideone.com/6qnZUx
              Ответить
        • Я знаю, что такое do. Вопрос был в том, сделан ли он средствами самого хаскеля или вшит, также как if, case, (=) и некоторые другие.

          Как оказалось вшит.
          Ответить
          • >как if, case, (=) и некоторые другие.
            А разве они вшиты? Разве if нельзя реализовать средствами хаскела? Он вроде достаточно для этого ленивый.
            Ответить
            • Можно реализовать, но не в таком же виде:

              newIf True true_value _ = true_value
              newIf False _ false_value = false_value

              А вот именно в виде if ... then ... else ... - нельзя
              Ответить
            • У ифа особый синтаксис. Как ты его реализуешь? Разве что как выше написал Fai в виде обычной функции.

              Я всегда буду обновлять страницу перед отправкой.
              Я всегда буду обновлять страницу перед отправкой.
              Я всегда буду обновлять страницу перед отправкой.
              Ответить
  • Да чего уж мелочиться-то.
    {-# LANGUAGE OverlappingInstances, FlexibleInstances, UndecidableInstances #-}
    
    import Prelude hiding ((.))
    import System.IO
    
    (.) = flip ($)
    infixl 0 <<
    cout = return ()
    
    class Cout a where
        (<<) :: IO () -> a -> IO ()
    instance Cout [Char] where
        stream << str = stream >> putStr str
    instance (Show a) => Cout a where
        stream << val = stream >> putStr (show val)
    
    my_list = [1 :: Integer ..]
    data Point = Point {x, y :: Double}
    my_point = Point 1.0 0.0
    endl = "\n"
    
    main = do
    {
       cout << "Hello, world!\n";
       cout << my_list.take(10).drop(5) << endl;
       cout << my_point.x << "; " << my_point.y << endl;
       return ();
    }
    Ответить
  • Я достаточно долгое время живу за рубежом, поэтому как-то проще уделять время своим шалостям. Никто особо не третирует за вопрос бисексуальности, хотя и в самой моей бисексуальности есть тонкости.
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8