Apakah komposisi fungsi Haskell adalah instance dari pola arsitektur pipa & filter

9

Pola arsitektur pipa & filter didefinisikan sebagai rantai elemen pemrosesan, disusun sedemikian rupa sehingga output setiap elemen adalah input dari elemen berikutnya . Setiap contoh tampaknya mempertimbangkan inter-proses atau koneksi antar-thread dilakukan melalui beberapa jenis buffer bersama.

Bagi saya, sepertinya komposisi fungsi Haskell sedang melakukan tugas yang sama. Bisakah kita mengatakan bahwa ini adalah contoh dari pola ini bahkan jika itu hanya tentang pemesanan fungsi dan tidak ada buffer eksplisit digunakan sebagai pipa? Jika ya, bisakah kita mengatakan hal yang sama untuk bahasa yang tidak malas?

authchir
sumber

Jawaban:

8

Mereka terhubung, tetapi koneksi adalah sebaliknya (semacam).

Komposisi morfisme dalam kategori yang tepat secara akurat memodelkan baik komposisi fungsi (di mana kategorinya adalah Setuntuk bahasa yang ketat dan CPOuntuk bahasa yang malas) dan komposisi proses (di mana kategorinya adalah (AFAIK, tanpa nama) kategori di mana objek adalah string, morfisme adalah shell proses, dan komposisi adalah operator pipa). Proses shell dapat dilihat, tanpa kehilangan keumuman atau keakuratan, sebagai fungsi (malas) dari tipe String -> WriterT String IO String, dan fungsi murni dari tipe String -> Stringdapat tanpa kehilangan dikonversi ke dan dari fungsi tipe String -> Identity String, sehingga keduanya benar-benar hanya (>>=)dalam penyamaran.

Api Ptharien
sumber
1
Apa itu CPOkategori? Google-fu saya lemah :(
Andres F.
3
@AndresF. Kategori Complete Partial Orders.
Flame Ptharien
2

Ada perbedaan. Pipa dan filter berhubungan dengan koneksi data dan data, sedangkan Komposisi Fungsi Haskell berhubungan dengan fungsi kelas satu . Fungsi kelas satu dapat dikomposisikan dengan cara yang tidak dilakukan pipa dan filter.

Bacaan Lebih Lanjut
Apa arti composability dalam konteks pemrograman fungsional?

Robert Harvey
sumber
1
Komposisi tidak harus berurusan dengan fungsi kelas satu karena komposisi itu sendiri merupakan fungsi kelas satu. Ambil contoh komposisi fungsi ++, di mana komposisi berada ., ++ . ++akan mengambil nilai dan mengembalikan nilai yang bertambah dua kali, tetapi ++bukan fungsi kelas satu, hanya mengambil nilai dan mengembalikan nilai. Fungsi komposisi adalah fungsi kelas satu yang mengambil dua fungsi dan mengembalikan satu.
Jimmy Hoffa
1
@ JimmyHoffa, saya pikir Anda membingungkan gagasan 'fungsi kelas satu' dengan 'fungsi tingkat tinggi'. Ketika suatu bahasa memiliki 'fungsi kelas satu' ia memperlakukan fungsi yang sama seperti memperlakukan tipe data kelas satu lainnya; mereka dapat diteruskan ke dan dikembalikan dari fungsi, disimpan dalam struktur data, dll. Fungsi tingkat tinggi mengambil keuntungan dari sifat kelas satu fungsi dengan mengambil parameter fungsi dan / atau mengembalikan nilai fungsi.
Levi Pearson
@LeviPearson ya, saya pasti tidak sengaja menempatkan otak saya ke samping ketika saya bangun pagi saya menulis komentar itu. Jika Anda akan terus mencari-cari di sini menulis konten yang bagus untuk P.SE, renungkan idling dalam obrolan umum P.SE
Jimmy Hoffa