15 января 2013 г.

Scala is fucking good language: my first program on Scala

See on the PasteBin

object Main {
  def main(args: Array[String]) {

    trait somegood { def good(o:Any) = {} }
    object fucking extends somegood{
      override def good(o:Any) {
        println("yeah!")
      }
    }
    object language;
    object scala {
      def is (o:Any):somegood = fucking
    }

    scala is fucking good language

}

//prints: yeah!

11 января 2013 г.

Перевод с Haskell на Javascript избранных частей лучшего введения в монады которое я когда-либо читал

English: Test logo for Haskell wikibook (for d...

Примечание переводчика 

Оригинал статьи расположен по адресу: http://blog.jcoglan.com/2011/03/05/translation-from-haskell-to-javascript-of-selected-portions-of-the-best-introduction-to-monads-ive-ever-read/


Перевод с Haskell на Javascript избранных частей лучшего введения в монады которое я когда-либо читал

Я знаю, знаю, миру не нужно еще одно введение в монады (или еще один пост, жалующийся на отсутствие еще одного введения в монады). Поэтому вас обрадует, что этот пост не один из подобных, в том смысле что он не нов. Я думаю я написал его потому что, во-первых, о монадах очень важно знать, а во-вторых, потому что я хочу разобраться как они связаны с асинхронным программированием и поэтому я использую Javascript чтобы помочь понять те вещи, о которых я возможно напишу позже. Также это полезное упражнение в мышлении в терминах типов. Если вы хотя бы немного знакомы с Haskell, я очень рекомендую вам прочитать исходную публикацию, Вы могли изобрести монады! (Или уже сделали это).
Для начала, небольшая предыстория. Монады наиболее используемы в языке Haskell, т.к. он разрешает только чистые функции, которые не имеют побочных эффектов. Чистые функции принимают аргументы на входе и возвращают результат, и это всё. Языки, которые я обычно использую (Ruby и Javascript) не имеют этого ограничения, но использование чистых функций часто становится полезным и развивает. Любое введение в монады расскажет вам, что монады это про сокрытие побочных эффектов функций в функциональной модели, благодаря которой вы можете делать I/O, но это не единственное приложение монад. Монады на самом деле про композирование функций, как мы увидем далее.
Рассмотрим пример. Предположим у вас есть функция нахождения синуса числа, которая в Javascript является просто оберткой вокруг библиотеки Math:
var sine = function(x) { return Math.sin(x) };
И у вас есть другая функция, возвращающая куб числа:
var cube = function(x) { return x * x * x };
Эти функции принимают один аргумент как вход и один аргумент возвращают, что позволяет сделать их композируемыми: вы можете использовать результат одной функции как параметр следующей:
var sineCubed = cube(sine(x));