Jun. 9th, 2012

juan_gandhi: (Default)
Вчера посмотрел. Там Бардем и Портман; фильм Формана.

Ну ладно анахронизмы, дочь богатого купца в Испании сидит одна в таверне пьянствует; идёт по улице без шляпы и вуали, тоже одна. Такого добра полно; Стравинский с Шанелью в соответствующем фильме когда собрались трахаться, любопытно было посмотреть, что они с себя снимают - и насколько они оба загорелые.

Не в этом дело. Бардем блистает, конечно; Портман - фарфоровая куколка, играет, если это можно так назвать, ужасно.

Весь фильм какой-то фальшивый, как "Император" Бертолуччи; эта пафосность, которая была хороша в 80-е, сейчас смотрится как любительский театр - ну это если убрать действительно хорошую игру актёров - не спасает, потому что попса, попса, попса. Фейк Антониони. Живые картины.

Ну и, в качестве сайд-эффекта, фильм вызывает заслуженную ненависть к социальной группе испанскому народу.

А, говорил ли я, что там ещё и Гойя фигурирует, в исполнении шведа Стеллана Скаршгора; ну этот нормальный, но Гойя как-то не вышел, не вышел.

Короче, поставил двойку. В смысле, вечером-то был впечатлён, но потом прошло, и остался осадок от пропаганды.
juan_gandhi: (Default)
  trait RightEitherFunctor[L] extends Functor[({type Maybe[A] = Either[L, A]})#Maybe] {
    def f1[A, B](f: A => B): Either[L, A] => Either[L, B] = _.right.map(f)
  }
  
  
  trait AccumulatingErrors[Bad] {
    val errorLog: Semigroup[Bad]
    implicit def acc(err: Bad) = errorLog.acc(err)
    type Maybe[T] = Either[Bad, T]
    
    object App extends Applicative[({type Maybe[A] = Either[Bad, A]})#Maybe] with RightEitherFunctor[Bad] {

      def pure[A](a: A):Either[Bad, A] = Right[Bad, A](a)

      implicit def applicable[A, B](maybeF: Maybe[A => B]) = {
        new Applicable[A, B, Maybe] {
          
          def <*>(maybeA: Maybe[A]) = maybeF match {
            case Left(badF) => maybeA match {
                case Left(errorA) => Left(badF <+> errorA)
                case Right(_)     => Left(badF)
              }
            case Right(f)   => maybeA match {
                case Left(badA) => Left(badA)
                case Right(a)   => Right(f(a))
              }
          }
        }
      }
    }
  }




Со стрелками пока не буду разбираться, а добавлю ещё пример какой-нибудь, положу всё на гитхаб ([livejournal.com profile] sassa_nf, you are welcome to participate!), и перепишу часть 7.

И такое ощущение, что эту же хрень, в сокращённом виде, надо будет вставлять в рабочий код. В частности, недавно обсуждавшийся вопрос накопления ошибок - вот же ж решение, моноид. Ну в смысле полугруппа; моноид это у МакБрайда с Патерсоном; достаточно полугруппы.

Disclaimer. Эти знания бесполезны для 99% программистов.
juan_gandhi: (Default)
Моё личное мнение.

Как я понимаю, гомосексуальные отношения широко распространены в природе (сам видел двух кобелей в позе 69). Так и смена пола у некоторых рыбок общепринята; да и у гиен, что ли, тоже не всё тривиально.

Однако же, догадываясь, что хромосомы не меняются от того, что отрезали или приклеили те или иные половые части, я как-то не верю, что человек так уж может поменять свой пол. Ну не верю.

И типа тех, кто на это дело смотрит с иронией... да нет, сам смотрю с иронией.

Но дело вот в чём. Не наше собачье дело. Хотя люди жить так, как они живут - и пожалуйста, это их священное право. Хотят, грубо говоря, некоторые жители, скажем, Москвы, вдруг напялить на себя георгиевские ленты, лампасы, позументы, андреевские кресты и ходить говорить, что они теперь православные казаки - да пожалуйста. Хоть горшком.

Надо уважать и радоваться разнообразию культурных форм.

Я и сам однажды, переодевшись в женское платье и намазав губы, прошелся вокруг школы под ручку с однокласником, будущим офицером КГБ (знал бы, не пошел бы).
juan_gandhi: (Default)
      trait Oops
      case class Omg(what: String) extends Oops
      case class OiVei(first: Oops, second: Oops) extends Oops
      object OopsAsSemigroup extends Semigroup[Oops] {
        def add(x: Oops, y: Oops) = OiVei(x, y)
      }


suggestions welcome

app

Jun. 9th, 2012 08:07 pm
juan_gandhi: (Default)
      val goodFun    = Right((s: String) => "<<" + s + ">>")
      val badFun     = Left(Omg("snafu"))
      val goodString = Right("I am good")
      val badString  = Left(Omg("I'm bad"))
      goodFun <*> goodString must_== Right("<<I am good>>")
      goodFun <*> badString  must_== Left(Omg("I'm bad"))
      badFun  <*> goodString must_== Left(Omg("snafu"))
      badFun  <*> badString  must_== Left(OiVei(Omg("snafu"), Omg("I'm bad")))


На этом примере я пока заканчиваю перепирание МакБрайда с Патерсоном на язык родных скал.
Закоммитил уже; сейчас или часть 7 надо пофиксить, или добавить ещё кода к котятам, а потом написать про кейк паттерн (шаблон пирога?)

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

August 2025

S M T W T F S
      12
3456789
10 11 12 13141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 16th, 2025 08:00 pm
Powered by Dreamwidth Studios