Burada fonksiyonel diller ve diğer şeyler hakkında çok fazla konuşma görüyorum. Neden "geleneksel" bir dilden birini kullanıyorsunuz? Daha iyi ne yapıyorlar? Ne daha kötüsü? İdeal fonksiyonel programlama uygulaması nedir?
Burada fonksiyonel diller ve diğer şeyler hakkında çok fazla konuşma görüyorum. Neden "geleneksel" bir dilden birini kullanıyorsunuz? Daha iyi ne yapıyorlar? Ne daha kötüsü? İdeal fonksiyonel programlama uygulaması nedir?
Yanıtlar:
İşlevsel diller, zorunlu ve nesneye yönelik dillerden farklı bir paradigma kullanır. Dilde temel yapı taşı olarak yan etkisi olmayan işlevleri kullanırlar. Bu, birçok şeyi mümkün kılar ve birçok şeyi daha zor hale getirir (veya çoğu durumda insanların alışkın olduklarından farklıdır).
Fonksiyonel programlamanın en büyük avantajlarından biri, yan etkisiz fonksiyonların yürütülme sırasının önemli olmamasıdır. Örneğin, Erlang'da bu, eşzamanlılığı çok şeffaf bir şekilde sağlamak için kullanılır. İşlevsel dillerdeki işlevler matematiksel işlevlere çok benzediği için bunları işlevsel dillere çevirmek kolaydır. Bazı durumlarda bu, kodu daha okunabilir hale getirebilir.
Geleneksel olarak, fonksiyonel programlamanın en büyük dezavantajlarından biri de yan etkilerin olmamasıydı. IO olmadan faydalı yazılım yazmak çok zordur, ancak IO'nun işlevlerde yan etkisi olmadan uygulanması zordur. Bu yüzden çoğu insan fonksiyonel programlamadan tek bir girişten tek bir çıktı hesaplamaktan daha fazlasını elde edemedi. F # veya Scala gibi modern karma paradigma dillerinde bu daha kolaydır.
Modern dillerin çoğunda fonksiyonel programlama dillerinin unsurları vardır. C # 3.0 çok fonksiyonel programlama özelliklerine sahiptir ve Python'da da fonksiyonel programlama yapabilirsiniz. İşlevsel programlamanın popülaritesinin nedenlerinin çoğunlukla iki nedenden kaynaklandığını düşünüyorum: Eşzamanlılık, normal programlamada gerçek bir sorun haline geliyor çünkü daha fazla çok işlemcili bilgisayar alıyoruz; ve diller daha erişilebilir hale geliyor.
"Yakalamak" için işlevsel yaklaşım hakkında herhangi bir soru olduğunu düşünmüyorum, çünkü yaklaşık 40 yıldır kullanılıyor (programlama tarzı olarak). Bir OO programcısı değişmez nesneleri destekleyen temiz kodlar yazdığında, bu kod işlevsel kavramları ödünç alır.
Bununla birlikte, işlevsel bir tarzı zorlayan diller bugünlerde çok sayıda sanal mürekkep alıyor ve bu dillerin gelecekte baskın olup olmayacağı açık bir sorudur. Benim şüphem , Scala veya OCaml gibi melez, çoklu paradigma dillerinin , saf OO dilinin (Smalltalk, Beta, vb.) Anaakım programlamayı etkilediği gibi "saf" işlevsel diller üzerinde baskın olacağı yönündedir . en yaygın kullanılan gösterimler olarak.
Son olarak, FP ile ilgili yorumlarınızın uzun yıllar önce prosedürel programcılardan duyduğum sözlere oldukça paralel olduğunu belirtmeye direnemiyorum:
Nasıl grafik kullanıcı arayüzleri ve "iş modeli olarak kod", OO'nun daha çok takdir edilmesine yardımcı olan kavramlar gibi, değişmezliğin ve daha basit (büyük) paralelliğin artan kullanımının, daha fazla programcının fonksiyonel yaklaşımın sunduğu faydaları görmesine yardımcı olacağına inanıyorum. . Ancak , son 50 yıl içinde dijital bilgisayar programlama tarihinin tamamını oluşturan öğrendiğimiz kadarıyla , hala öğrenecek çok şeyimiz olduğunu düşünüyorum. Yirmi yıl sonra, programcılar, şu anda kullandığımız araçların ilkel doğasına , şimdi popüler OO ve FP dilleri de dahil olmak üzere şaşkınlıkla bakacaklar .
Benim için ana artı, özellikle şimdi daha fazla MHz'den ve daha fazla çekirdeğe doğru ilerlediğimiz için doğal paralelliğidir.
Bir sonraki programlama paradigması olacağını ve tamamen OO tipi yöntemlerin yerini alacağını düşünmüyorum, ancak kodumun bir kısmını fonksiyonel bir dilde yazmamız gerektiğine veya genel amaçlı dillerimizin daha fonksiyonel yapılar içerecek şekilde büyür.
Hiçbir zaman profesyonel bir dilde profesyonel olarak çalışmasanız bile, fonksiyonel programlamayı anlamak sizi daha iyi bir geliştirici yapar. Kodunuz ve genel olarak programlama hakkında size yeni bir bakış açısı kazandıracaktır.
Diyorum ki öğrenmemek için bir sebep yok.
Bence fonksiyonel ve zorunlu tarzı karıştırmak için iyi bir iş yapan diller en ilginç ve başarılı olma olasılığı en yüksek olanlardır.
Her zaman bir sonraki büyük şey hakkında şüpheliyim. Bir sonraki Büyük Şey, teknolojinin iyi olup olmadığına bakılmaksızın doğru zamanda doğru yerde olmak, tarihin saf bir kazasıdır. Örnekler: C ++, Tcl / Tk, Perl. Tüm kusurlu teknolojiler, hepsi çılgınca başarılı çünkü günün problemlerini çözmek için ya da yerleşik standartlarla neredeyse aynı olduklarını algıladılar. Fonksiyonel programlama gerçekten harika olabilir, ancak bu benimseneceği anlamına gelmez.
Ama olabilir insanlar neden size heyecanlı birçok, birçok programcı "dönüşüm deneyimi" bir tür oldu onlar üretirken fonksiyonel bir dil kullanarak üretken (üretken olarak ya da belki on kat) olarak iki kez yapar keşfetmek burada: fonksiyonel programlama hakkında değiştirmeye daha dayanıklı ve daha az hata içeren kod. Bu insanlar işlevsel programlamayı gizli bir silah olarak düşünürler; bu zihniyetin iyi bir örneği Paul Graham'ın Ortalamaları Atıyor . Oh, ve onun uygulaması? E-ticaret web uygulamaları.
2006 yılının başından bu yana, işlevsel programlama ve paralellik konusunda da bazı sıkıntılar yaşandı. Simon Peyton Jones gibi insanlar en azından 1984'ten beri paralellikten endişe duyduklarından, fonksiyonel diller çok çekirdekli sorunu çözene kadar nefesimi tutmuyorum. Ancak şu andaki ek vızıltılardan bazılarını açıklıyor.
Genel olarak, Amerikan üniversiteleri fonksiyonel programlamayı öğretmek için kötü bir iş çıkarmaktadır. Scheme kullanarak intro programlamayı öğretmek için güçlü bir destek çekirdeği var ve Haskell de bazı desteklerden hoşlanıyor, ancak fonksiyonel programcı için gelişmiş teknik öğretmenin çok az yolu var. Harvard'da böyle bir ders verdim ve bunu bu bahar Tufts'ta tekrar yapacağım. Benjamin Pierce Penn'de böyle bir ders verdi. Paul Hudak'ın Yale'de bir şey yapıp yapmadığını bilmiyorum. Avrupa üniversiteleri çok daha iyi bir iş çıkarıyor; örneğin, Danimarka, Hollanda, İsveç ve Birleşik Krallık'ta önemli yerlerde fonksiyonel programlama vurgulanmaktadır. Avustralasya'da olup bitenler hakkında daha az fikrim var.
Burada odada fil söz kimse görmüyorum, bu yüzden bana kalmış :)
JavaScript işlevsel bir dildir. JS ile gittikçe daha fazla insan, özellikle jQuery, Dojo ve diğer çerçevelerin daha ince noktalarından yararlanarak, daha gelişmiş şeyler yaptıkça, FP web geliştiricisinin arka kapısı tarafından tanıtılacak.
Kapaklarla birlikte FP, JS kodunu gerçekten hafif ama yine de okunabilir hale getirir.
Şerefe, PS
Çoğu uygulama normal OO yollarıyla çözülebilecek kadar basittir
OO yolları her zaman "normal" olmamıştır. Bu on yılın standardı son on yılın marjinalleşmiş konseptiydi.
Fonksiyonel programlama matematiktir. Lisp'de Paul Graham ( Lisp'in yerine fonksiyonel programlama):
Bu yüzden bu 1950'lerin dilinin neden eskimiş olmadığına dair kısa açıklama, teknoloji değil, matematik ve matematik bayatlamıyor. Lisp'yi karşılaştırmak için doğru olan şey 1950'lerin donanımı değil, 1960'da keşfedilen ve hala en hızlı genel amaçlı sıralama olan Quicksort algoritmasıdır.
Eminim kullandığınızda fonksiyonel programlama yaptığınızı bilmiyordunuz:
Ortalama bir kurumsal programcı, örneğin birlikte çalıştığım insanların çoğu bunu anlamayacak ve çalışma ortamlarının çoğu programlamanıza izin vermeyecek
Bu sadece bir zaman meselesi. Ortalama bir kurumsal programcınız mevcut Big Thing ne olursa olsun öğrenir. 15 yıl önce, OOP'yi anlamadılar. EĞER FP senin "ortalama kurumsal programcılar" takip edecek, yakalar.
Gerçekten üniversitelerde öğretilmiyor (ya da günümüzde mi?)
Çok değişir. Üniversitemde, SML öğrencilerin tanıtıldığı ilk dildir. MIT'in LISP'yi birinci yıl dersi olarak verdiğine inanıyorum. Bu iki örnek elbette temsili olmayabilir, ancak inanıyorum ki çoğu üniversite, müfredatın zorunlu bir parçası olmasalar bile, FP'de bazı isteğe bağlı dersler sunmaktadır.
Çoğu uygulama normal OO yollarıyla çözülebilecek kadar basittir
Bu gerçekten de "yeterince basit" bir mesele değil. FP'de bir çözüm daha basit (veya daha okunabilir, sağlam, zarif, performanslı) olur mu? Birçok şey "Java'da çözülebilecek kadar basit", ancak yine de godawful miktarda kod gerektirir.
Her halükarda, FP taraftarlarının bunun onlarca yıldır Sonraki Büyük Şey olduğunu iddia ettiğini unutmayın. Belki de haklılar, ancak 5, 10 veya 15 yıl önce aynı iddiayı yaptıkları zaman olmadığını unutmayın.
Bununla birlikte, kesinlikle onların lehine sayılan bir şey, son zamanlarda, C # 'ın, farkına bile varmadan , bir nesil programcıyı FP programcılarına dönüştürdüğü ölçüde, FP'ye keskin bir dönüş yaptığıdır . Bu sadece FP "devriminin" önünü açabilir. Olabilir. ;)
İnsan, diğer sanatlardaki değeri göremezse, seçtiği sanatın mükemmelliğini ve kusurlarını anlayamaz. Kurallara uymak sadece teknikte bir noktaya kadar gelişmeye izin verir ve daha sonra öğrenci ve sanatçı daha fazla öğrenmek ve daha fazla araştırmak zorundadır. Stratejinin yanı sıra diğer sanatları da incelemek mantıklı.
Kim başkalarının faaliyetlerini izleyerek kendileri hakkında daha fazla şey öğrenmedi? Kılıcı gitar çalmayı öğrenmek. İlk çalışma ticaretini öğrenmek. Sadece kılıcı incelemek seni dar görüşlü yapar ve dışa doğru büyümene izin vermez.
- Miyamoto Musashi, "Beş Yüzüklü Bir Kitap"
İşlevsel bir dilde anahtar özelliklerden biri birinci sınıf işlevler kavramıdır. Buradaki fikir, işlevleri parametre olarak diğer işlevlere geçirip değer olarak verebilmenizdir.
Fonksiyonel programlama, durumu değiştirmeyen kod yazmayı içerir. Bunu yapmanın başlıca nedeni, bir işleve art arda yapılan çağrıların aynı sonucu vermesidir. Birinci sınıf işlevleri destekleyen herhangi bir dilde işlevsel kod yazabilirsiniz, ancak Haskell gibi durumu değiştirmenize izin vermeyen bazı diller vardır. Aslında, herhangi bir yan etki (metin yazdırmak gibi) yapmamanız gerekir - ki bu tamamen işe yaramaz gibi görünebilir.
Haskell bunun yerine IO: monad'lara farklı bir yaklaşım uyguluyor. Bunlar, tercümanınızın üst seviyesi tarafından yürütülmesini istediğiniz IO işlemini içeren nesnelerdir. Başka herhangi bir seviyede bunlar sistemdeki nesnelerdir.
Fonksiyonel programlama ne gibi avantajlar sağlar? Fonksiyonel programlama, her bileşen tamamen izole edildiğinden hatalar için daha az potansiyel ile kodlamaya izin verir. Ayrıca, özyineleme ve birinci sınıf işlevlerin kullanılması, genellikle kodun yapısını yansıtan basit doğruluk kanıtlarına izin verir.
Çoğu gerçekçi insanın işlevsel programlamanın yakalayacağını düşündüğünü sanmıyorum (OO gibi ana paradigma olur). Sonuçta, çoğu iş problemi oldukça matematik problemleri değil, verileri hareket ettirmek ve çeşitli şekillerde görüntülemek için kıllı zorunlu kurallardır, bu da saf fonksiyonel programlama paradigması için iyi bir uyum olmadığı anlamına gelir (monad'ın öğrenme eğrisi OO'yu aşar).
OTOH, fonksiyonel programlamayı programlamayı eğlenceli kılan şeydir. Evrenin temel matematiğinin özlü ifadelerinin doğal, zamansız güzelliğini takdir etmenizi sağlar. İnsanlar fonksiyonel programlamayı öğrenmenin sizi daha iyi bir programcı yapacağını söylüyor. Bu elbette son derece özneldir. Şahsen bunun da tamamen doğru olduğunu düşünmüyorum.
Seni daha iyi bir canlı yapar.
Yoğun olmalıyım, ama hala anlamıyorum. Kaynak koduna bakabileceğiniz ve böyle bir yaklaşımı kullanmanın nasıl ve neden daha iyi olduğunu görebileceğiniz F # gibi fonksiyonel bir dilde yazılmış küçük uygulamaların gerçek örnekleri var mı?
İşlevsel diller hakkında söylediğiniz her şeyin, çoğu insanın yaklaşık 20 yıl önce nesneye yönelik diller hakkında söylediklerini belirtmek isterim. O zamanlar OO hakkında duymak çok yaygındı:
* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways
Değişim bir yerden gelmek zorunda. Anlamlı ve önemli bir değişiklik, önceki teknolojiler konusunda eğitim almış insanların değişimin gerekli olmadığı görüşünü alıp almadığına bakılmaksızın kendisini gerçekleştirecektir. O zamana karşı olan tüm insanlara rağmen OO'daki değişimin iyi olduğunu düşünüyor musunuz?
Microsoft ittiği için F # yakalayabilir.
Pro:
Contra:
Bu yüzden F # 'a önemli olması için 50:50 şans veriyorum. Diğer fonksiyonel diller yakın gelecekte bunu yapmayacak.
Sanırım bir sebep, bazı insanların bir dilin kabul edilip edilmeyeceğinin en önemli kısmının dilin ne kadar iyi olduğunu düşünmesidir . Ne yazık ki, işler nadiren çok basittir. Örneğin, ben o halde Python'un kabul arkasında büyük faktör (dil kendisi olmadığını iddia ediyorum olduğu oldukça önemli). Python'un bu kadar popüler olmasının en büyük nedeni, devasa standart kütüphanesi ve daha büyük 3. parti kütüphanelerinden oluşan topluluktur.
Clojure veya F # gibi diller, JVM / CLR üzerine kuruldukları düşünüldüğünde bu kuralın istisnası olabilir. Sonuç olarak, onlar için bir cevabım yok.
Uygulamaların çoğu [en sevdiğiniz dili, paradigmayı vb. Buraya yazın] içinde çözülebilir.
Bu doğru olsa da, farklı sorunları çözmek için farklı araçlar kullanılabilir. Fonksiyonel, doğru kullanıldığında işlerimizi daha etkili bir şekilde yapmamıza izin veren başka bir yüksek (daha yüksek?) Seviye soyutlamaya izin verir.
Bana öyle geliyor ki Lisp veya Scheme'yi bir lisans olarak hiç öğrenmemiş olan insanlar şimdi keşfediyorlar. Bu alandaki birçok şeyde olduğu gibi, yüksek beklentiler aldatıcı ve yaratma eğilimi var ...
Geçecek.
Fonksiyonel programlama harikadır. Ancak, dünyayı ele geçirmeyecektir. C, C ++, Java, C #, vb.
Bunun ne olacağını daha çok dil arası yetenek olarak görüyorum - örneğin şeyleri işlevsel bir dilde uygulamak ve daha sonra diğer dillerdeki şeylere erişim vermek.
Epic Games'ten Tim Sweeney'nin "Bir Sonraki Ana Programlama Dili: Bir Oyun Geliştiricisinin Perspektifi" ni okurken ilk düşüncem - Haskell'i öğrenmem gerekiyordu.
Bir süredir işler işlevsel bir yönde ilerliyor. Son birkaç yılın iki havalı yeni çocuğu olan Ruby ve Python, her ikisi de işlevsel dillere önlerinden gelenlerden radikal olarak daha yakınlar - o kadar ki bazı Lispers birini veya diğerini "yeterince yakın" olarak desteklemeye başladı.
Ve büyük ölçüde paralel donanım herkes üzerinde - ve değişikliklerle başa çıkmak için en iyi yerde fonksiyonel diller - evrim baskısı yaratarak - Haskell veya F # 'nin bir sonraki büyük şey olacağını düşünmek kadar büyük bir sıçrama değil.
Son zamanlarda programlama dillerinin gelişimini takip ediyor musunuz? Tüm anaakım programlama dillerinin her yeni sürümü, işlevsel programlamadan giderek daha fazla özellik ödünç alıyor.
Kapanışlar, anonim işlevler, geçen ve dönen işlevler, yalnızca Lisp ve ML bilgisayar korsanları tarafından bilinen egzotik özelliklerdi. Ancak yavaş yavaş, C #, Delphi, Python, Perl, Javascript, kapanışlar için destek ekledi. Yaklaşan herhangi bir dilin kapanmadan ciddiye alınması mümkün değildir.
Özellikle Python, C # ve Ruby gibi birçok dilde liste anlama ve liste oluşturucular için yerel destek bulunur.
ML 1973'te jenerik programlamaya öncülük etti, ancak jenerik ("parametrik polimorfizm") desteği sadece son 5 yılda bir endüstri standardı haline geldi. Doğru hatırlıyorsam, Fortran 2003'te jenerikleri destekledi, ardından 2005'te Java 2004, C # 2008, Delphi'yi 2008'de destekledi. .)
Bu özellikleri programcılara çekici yapan nedir? Açıkça görülmelidir: programcıların daha kısa kod yazmasına yardımcı olur . Gelecekte tüm diller, rekabetçi kalmak istiyorlarsa en azından kapanmaları destekleyeceklerdir. Bu bakımdan fonksiyonel programlama zaten ana akımdadır.
Çoğu uygulama normal OO yollarıyla çözülebilecek kadar basittir
Kim demiş fonksiyonel programlamayı basit şeyler için de kullanamaz? Her işlevsel programın bir derleyici, teorem kanıtlayıcı veya büyük ölçüde paralel telekomünikasyon anahtarı olması gerekmez. Daha karmaşık projelerime ek olarak geçici olarak özel komut dosyaları için F # kullanıyorum.
Dikkat çekicidir çünkü karmaşıklığı kontrol etmek için en iyi araçtır. Bkz:
- Simon Peyton-Jones'un 109-116. Slaytları "Haskell'in Tadımı"
- "Bir Sonraki Ana Programlama Dili: Bir Oyun Geliştiricinin Perspektifi" - Tim Sweeney
İlk noktaya katılıyorum, ama zaman değişiyor. Şirketler geç evlat edinenler olsalar bile, sahip olmanın bir avantajı olduğunu görürlerse cevap vereceklerdir. Hayat dinamiktir.
90'lı yılların sonunda Stanford'da Haskell ve ML'yi öğretiyorlardı. Eminim Carnegie Mellon, MIT, Stanford ve diğer iyi okullar bunu öğrencilere sunuyor.
"Web'de ilişkisel veritabanlarını gösterme" uygulamalarının çoğunun bu bağlamda uzun süre devam edeceğini kabul ediyorum. Java EE, .NET, RoR ve PHP bu soruna oldukça iyi çözümler geliştirmiştir.
Önemli bir şeye çarptınız: İşlevsel programlamayı artıracak başka yollarla kolayca çözülemeyen sorun olabilir. Bu ne olurdu?
Devasa çok çekirdekli donanım ve bulut bilişim bunları beraberinde getirecek mi?
Çünkü FP'nin üretkenlik, güvenilirlik ve sürdürülebilirlik açısından önemli faydaları vardır. Çok çekirdekli, nihayet büyük şirketlerin eski büyük kodlara rağmen geçiş yapmasını sağlayan bir katil uygulama olabilir.Ayrıca, C # gibi büyük ticari diller bile çok çekirdekli endişelerin bir sonucu olarak farklı bir işlevsel lezzet alıyor - sadece yan etkiler eşzamanlılık ve paralellik ile iyi uyuşma.
"Normal" programcıların bunu anlamadığını kabul etmiyorum. Eninde sonunda OOP'u anladıkları gibi (daha gizemli ve tuhaf, daha fazla değilse).
Ayrıca, çoğu üniversite FP öğretir, hatta çoğu ilk programlama kursu olarak öğretir.
Vay canına - bu ilginç bir tartışma. Bu konuda kendi düşüncelerim:
FP bazı görevleri nispeten basit hale getirir (FP olmayan dillere kıyasla). Hiçbiri FP dilleri şimdiden FP'den fikir almaya başlıyor, bu yüzden bu eğilimin devam edeceğinden şüpheleniyorum ve insanların FP'ye sıçramasını kolaylaştırmak için daha fazla birleştirme göreceğiz.
Yakalayıp yakalamayacağını bilmiyorum, ama araştırmalarımdan, fonksiyonel bir dil neredeyse kesinlikle öğrenmeye değer ve sizi daha iyi bir programcı yapacak. Sadece referans şeffaflığı anlamak birçok tasarım kararını çok daha kolay hale getirir - ve sonuçta ortaya çıkan programların akıl yürütmesi çok daha kolaydır. Temel olarak, bir sorunla karşılaşırsanız, yüzlerce sınıf / yöntem / işlevden herhangi birinin neden olabileceği, tutarsız bir durumdaki bir sorundan ziyade, tek bir işlevin çıktısı ile ilgili bir sorun olma eğilimindedir. yan etkileri olan ölçülü bir dilde.
FP'nin vatansız doğası, web'in vatansız doğasına daha doğal bir şekilde eşleşir ve bu nedenle fonksiyonel diller, kendilerini daha zarif, RESTFUL webapps'lere daha kolay borçlandırır. Uygulama durumunu korumak için VIEWSTATE ve SESSION anahtarları gibi korkunç çirkin HACK'lere başvurması gereken ve JAVA ve .NET çerçevelerinin aksine, durum gibi zorunlu bir dilin web gibi temelde vatansız bir işlevsel platformda (bazen oldukça sızdıran) soyutlamasını korumak.
Ayrıca, uygulamanız ne kadar vatansız olursa, paralel işleme için o kadar kolay borç verebilir. Web siteniz popüler hale gelirse, web için çok önemlidir. Daha iyi performans elde etmek için bir siteye daha fazla donanım eklemek her zaman kolay değildir.
Benim görüşüme göre, Microsoft bunu ana akımın içine daha da itti. Benim için bu, bizim için yapabileceklerinden dolayı cazip, çünkü yeni bir meydan okuma ve geleceğe yönelik iş fırsatları nedeniyle.
Bir kez hakim olduktan sonra, programcılar olarak bizi daha üretken hale getirmemize yardımcı olacak başka bir araç olacaktır.
Tartışmada kaçırılan bir nokta, en iyi tip sistemlerin çağdaş FP dillerinde bulunmasıdır. Dahası, derleyiciler tüm (veya en azından çoğu) türleri otomatik olarak çıkarabilir.
Java programlanırken yazım adlarının yarısını harcamak ilginçtir, ancak Java açık bir şekilde güvenli değildir. Bir Haskell programında asla tip yazamazsınız (derleyici tarafından kontrol edilen bir çeşit doküman hariç) ve kod% 100 tip güvenlidir.
Diğer cevaplara ek olarak, çözümü saf fonksiyonel terimlerle ifade etmek, problemi daha iyi anlamaya zorlar. Tersine, işlevsel bir tarzda düşünmek daha iyi * problem çözme becerileri geliştirecektir.
* Ya işlevsel paradigma daha iyi olduğu ya da ek bir saldırı açısı sağlayacağı için.