nostr://delirehberi@emre.xyz
RELAYS: OK [RSS] [ADMIN]

# I am a veteran Full-Stack Engineer, Open Source Contributor, and Web Generalist. Having shipped applications continuously since 2005, I don't just write code—I architect scalable digital systems that drive business value. Building Nostr tools: - https://nostr.emre.xyz - https://photo.emre.xyz - https://snips.emre.xyz - https://nostr.org.tr - https://rehber.dev - https://jotstr.com - https://ulasocial.com

$ cat ./posts/functor-nedir-haskell.md

Functor nedir haskell

TIMESTAMP: 2023-09-10T12:57:08.000Z | 2 MIN_READ

Original date 2019-10-28T00:00:00.000Z

Son bir kaç aydır Haskell öğrenmeye çalışıyorum. Neden böyle bir maceraya giriştiğimle ilgili bir yazı yazmak istiyorum ilerde.

Şimdilik öğrendiğimi düşündüğüm konuları hem not etmek, hem de türkçe kaynak oluşturmuş olabilmek adına, olabildiğince bloguma eklemeye çalışacağım.

Functor, Haskell'de bir TypeClass olarak tanımlanmıştır. Yaptığı iş, kapsayıcıya/kapsama (context) müdahale etmeden, içerdeki veride işlem yapabilmeye olanak sağlamaktır.

Basitçe toplama işlemi için (+3) 2 dediğimizde, 2 ile 3 ile toplayan fonksiyonu işleme sokarak 5 sonucuna ulaşmış oluyoruz. + iki argüman bekleyen bir fonksiyon olduğu için birinci fonksiyonu vererek 3 ile toplayan fonksiyona çevirme işlemine currying deniyor. Başka bir yazıda detaylıca gireceğim.

Ancak contexte müdahale etmeden işlem yapmak istediğimiz zamanlar olacaktır. Örneğin; Haskell'de Maybe adında bir type mevcut. Just ile kapsanmış bir değer yahut Nothing değerine sahip olabilir. Eğer elimizde Maybe Int türünde bir Just 2 değeri varsa bunu (+3) fonksiyonumuza nasıl verebiliriz? + fonksiyonu iki argüman bekliyor, ikisi de Num olmalı. Ancak birisi doğruyken diğeri bir kapsayıcı içerisinde.

Üstelik biz işlem sonucunda elimizdeki Just 2 değerinin türünün değişmesini istemiyoruz.

Çok şanslıyız çünkü Maybe türü bir Functor.

Peki bir Functorı nasıl işleme sokabiliriz? Elimizdeki Functorlar ile işlem yapmamız için çok güzel bir fonksiyon var ve adı fmap.

Bir Functor ile işlem yapmak istediğimizde, fmap fonksiyonunu kullanabiliriz. Örneğin; fmap (+3) (Just 2) dediğimizde bize sonuç olarak Just 5 verecek ve kapsayıcımız bozulmamış olacak.

Maybe türü için Functor tanımlaması ise şöyle yapılmış durumda:

haskell
instance Functor Maybe where
    fmap func (Just val) = Just (func val)
    fmap func Nothing = Nothing

Gördüğünüz gibi net bir şekilde Functor typeclassından tanımlanmış instancelar ile Functorların fmap fonksiyonu ile nasıl çalışabileceği belirlenmiş durumda. Tüm Functorlar için instancelar bu şekilde tanımlanmıştır. Maybe için eğer beklenen değer Nothing gelirse verilen fonksiyon uygulanmadan Nothing dönmektedir.

Ayrıca Haskell'de listeler de birer Functor instanceına sahiptir. Bunu da diğer yazıda paylaşacağım.

#haskell #tr #functor #functionalprogramming #fonksiyonelprogramlama

Emre Yilmaz
Emre Yilmaz
delirehberi@emre.xyz
About Author
Emre Yilmaz
Emre Yilmaz ✓ delirehberi@emre.xyz

I am a veteran Full-Stack Engineer, Open Source Contributor, and Web Generalist. Having shipped applications continuously since 2005, I don't just write code—I architect scalable digital systems that drive business value. Building Nostr tools: - https://nostr.emre.xyz - https://photo.emre.xyz - https://snips.emre.xyz - https://nostr.org.tr - https://rehber.dev - https://jotstr.com - https://ulasocial.com

Value 4 Value

Comments & Discussions (0)

Decentralized replies powered by Nostr (NIP-22 / NIP-10)
Loading Nostr comments...
🏷️ Topics
No items in this list.