• gerçekten saf* bir fonksiyonel programlama dili.
    en önemli özelliklerinden biri lazy evaluation yapmasıdır. bu sayede sonsuz listeler tanımlayabilirsiniz ancak gerek olmadığı sürece haskell bunu hesaplamayacağından herhangi bir loop'a girmez, sorun yaşamazsınız.

    mesela tüm tam sayıların karelerinden oluşan bir liste tanımlayacağım, çok kolay...

    squares = [n*n | n<-[0..]]

    ancak gene de sikim* gibi bişidir. zaten tüm fonksiyonel programlama dilleri esasen sikim* gibidir. zira bana acı çektirmekten başka bi scheme'e yaradıklarını görmedim.
    (bkz: ne kadar sallarsan salla dona düşer son damla)
  • birkac aydir hasir nesir oldugum, ve kendisiyle ilgili ne dusundugume bir turlu karar veremedigim, aramizda bir love-hate relationship hasil olan, guzel ve sinir bozucu dil.

    once guzelliginden baslayalim. pek cok programlama dilini azicik da olsa denemis bir insan olarak, haskell kadar elegant bir yapi gormedigimi soylemeliyim. kendisini okumayi ogrenmek biraz zaman aliyor, ancak ogrendikten sonra her sey cok keyifli, adeta bir la la land. io monadi, type classlar, hepsi cok guzel isliyor ve tertemiz, ustelik sizi bir programci olarak cok gelistirdigi asikar. bunlarin hepsi beni daha da cok haskell kullanmaya itiyor, cunku baska fonksiyonel dillerde bu ozellikleri ariyorum ama bulamiyorum.

    amma velakin, isin bir de diger yuzu var. gercek dunyada bu dili kullanmak icin paketlere ihtiyaciniz var, ve haskell'in varsayilan paket yoneticisi olan cabal, rezalet bir sistem. (cabal-install desek daha dogru) herhangi bir paketin derlenmesi inanilmaz uzun bir zaman aliyor. ustune ustluk, derlenebilecegi de garanti degil. backward compatibility konusunda buyuk sorunlar var. sadece bu da degil, global olarak yuklediginiz paketler var olan paketlerinizi bozabiliyor. bunun icin sandboxlar kullanilsa da, bu sefer de sandbox icindeki paketlerin hem derlenmesi cok uzun suruyor, hem de diskte cok buyuk yer kapliyor. ozetle, bu durum gercek bir proje icin haskell kullanmayi cok sevimsiz hale getiriyor. bu islemlerin daha kolay bir yolu olsaydi haskell ile mutlu mesut yasayabilirdim, fakat ne yazik ki bu ekosistemin (dilin degil) almasi gereken uzun bir yol var.

    unutmadan, haskell'le ilgili onemli bir eksik daha var: ornekli dokumantasyon. evet, haskell' de yazilmis kod buyuk olcude self-documenting (sevmek icin bir sebep daha) ve hackage'da guzel dokumantasyon mevcut, ancak bu dokumantasyonu anlamak icin caba gerekiyor. orneklerle aciklanmamis kutuphaneler, bilmeyenlere pek bir sey ifade etmiyor. dahasi, o kutuphaneleri kullanmak icin best practice'ler nelerdir, bunu da hackage dokumantasyonundan anlamak mumkun degil.

    ozetle efenim, haskell ogrenin, ogretin, her ne kadar cok sevdiginiz ama kavusamadiginiz bir hayal olarak kalacak olsa bile.

    edit: cabal sorununa soyle bir cozum var, iyi de calisiyor: http://www.stackage.org/
    edit 2: cabal sorununu cozmek icin soyle bir sey gelistirildi ve haskell cevrelerinde kabul edildi: https://github.com/commercialhaskell/stack
  • ne dediler:

    ... haskell taking over the world and troubled parents ask why their kids have turned into math hippies talking about nothing but love and abstract algebra...
    -- schluehk

    haskell manipulates functions with the same ease that perl manipulates strings
    -- johngoerzen

    damn it, haskell pseudo code is indistinguishable from actual code
    -- roconnor

    smith's law: any sufficiently large test suite for a program written in a dynamic language will contain an ad-hoc, informally-specified, bug-ridden, slow, patchy implementation of half of the haskell type system
    -- ?

    fear leads to uncertainty. uncertainty leads to doubt. doubt leads to theorem proving.
    -- monochrom

    programming in haskell is like dual-wielding two light sabers whereas programming in imperative languages is like being equipped with a blunt kitchen knife.
    -- apfelmus

    kaynak: haskell weekly news
  • dil tasarımcıları için laboratuvar gibidir haskell ve compiler'ı ghc. pek çok yeni özellik önce ghc extension'larında boy gösterir, sonra haskell standardına ve diğer dillere geçer. haskell'ın programlama dilleri literatürüne kazandırdığı en önemli iki konsept olarak ad-hoc polymorphism'i daha az ad-hoc hale getiren type class'ları (bakınız wadler'ın "how to make ad-hoc polymorphism less ad-hoc" makalesi) ve side effectleri kontrol için geliştirilen kategori kuramından fırlama monadları (ki onlar da type class'ları kullanır zaten) örnek gösterebilirim. aynı zamanda bunlar sayesinde haskell'daki bi fonksiyonun side effect içerip içermediği sadece fonksiyonun type'ına bakarak anlaşılabilir. (diğer dillerde bunu anlamanın kolay yolu yok.)

    işin mizahi yönüne gelirsek, james iry'nin harika "a brief, incomplete, and mostly wrong history of programming languages" yazısında haskell şöyle geçer:

    1990 - a committee formed by simon peyton jones, paul hudak, philip wadler, ashton kutcher, and people for the ethical treatment of animals creates haskell, a pure, non-strict, functional language. haskell gets some resistance due to the complexity of using monads to control side effects. wadler tries to appease critics by explaining that "a monad is a monoid in the category of endofunctors, what's the problem?"

    http://james-iry.blogspot.com/…nd-mostly-wrong.html

    wadler da blogunda monad konseptinin öğrenme zorluğundan yakınıp tutorial arayanlara gönderme yaparak şöyle karşılık verir:

    "several folk have pointed me at this, since haskell and myself get a mention. i'm delighted to learn that "a monad is a monoid in the category of endofunctors"---anyone know where i can find a good tutorial?"
  • meşhur quicksort algoritmasını (haskell ile) implement edelim:

    qs [] = []
    qs (first:rest) = qs smaller ++ [first] ++ qs larger
    where
    smaller = [ a | a<-rest, a<=first]
    larger = [ b | b<-rest, b >first]

    kısa ve öz.

    (bkz: quicksort/#25948418)
  • eglendirirken ögreten bir kaynak icin bkz. http://learnyouahaskell.com/
  • https://haskell.mooc.fi/ adresinde guzel bir kurs bulabileceginiz programlama dili. kursu tamamladiktan sonra ders icin helsinki universitesi'nden ects kredisi alabiliyorsunuz,
  • tu münchen ınformatik bölümünün bu sene functional programming dersinde ocaml yerine kullanmaya başladığı dil. kaynak olarak verilen kitabı oldukça beğendim. haskell the craft of functional programming
  • türkiye'de haskell ile aktif geliştirme yapan bildiğim tek yer (bkz: picus) dur. ağ güvenlik sistemleri geliştiriyorlar ve haskell ile beraber (bkz: nix), (bkz: nixos), (bkz: nixops) vs gibi teknolojilerin de dibini sıyırıyorlar.
hesabın var mı? giriş yap