1. C++ / Говнокод #11879

    +29

    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
    template <class Monad>
       struct XMapM {
          template <class F, class M> struct Sig : FunType<F,M,
             typename RT<typename ::fcpp::BindM<Monad>::Type,M,typename LEType<
                LAM<LV<1>,CALL<typename ::fcpp::UnitM<Monad>::Type,
                CALL<F,LV<1> > > > >::Type>::ResultType> {};
          template <class F, class M>
          typename Sig<F,M>::ResultType
          operator()( const F& f, const M& m ) const {
             LambdaVar<1> A;
             return bindM<Monad>()( m, lambda(A)[ unitM<Monad>()[f[A]] ] );
          }
       };

    Хаскель не нужен.

    Запостил: serpinski, 05 Октября 2012

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

    • Но Лиспа не хватает
      >::)))e>
      Ответить
    • Фигня, простейший пример из предисловия к самоучителю Александреску по шаблонам для 1го класса.
      Ответить
      • Кресты вообще легко читаются.
        Ответить
        • Конечно. И с каждым новым стандартом становятся всё читаемее и читаемее.
          Ответить
    • Монады в крестах смотрятся как Govno
      Ответить
    • хвостасто врекурсились вы этими монадами
      Ответить
    • >Хаскель не нужен.
      Сам этот код написал?
      Ответить
    • > Хаскель не нужен.
      Не, на Хаскелле красивше. По крайней мере, так столько буков писать не надо.
      Но вкусняшечкой ты меня побаловал )
      Ответить
    • Вот правильный хаскель)
      Палю годноту:
      http://people.cs.umass.edu/~yannis/fc++/
      http://www.cs.umass.edu/~yannis/fc++/fc++-sigplan.pdf


      Источник говнокода:
      http://people.cs.umass.edu/~yannis/fc++/FC++.1.5/monad.h
      Ответить
      • Хрена себе, он карирование через плейсхолдер организовал. Интересно, как?
        auto integers = list_with(1,2,3);
        answer = list_with(0,-1,-2);
        check( map(bind1of2(minus,1),integers));
        check( map( minus(1), integers ) );
        check( map( minus(1,_), integers ) );

        > minus(1,_)
        Ответить
        • Забыл сказать, чтобы вы не рассказывали как это сделано, ибо догадался.
          Ответить

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