Skip to content

Commit

Permalink
Merge pull request #18 from renomureza/improve-translate
Browse files Browse the repository at this point in the history
improve translate
  • Loading branch information
renomureza authored Sep 2, 2021
2 parents 4a7eba5 + 0cd0d9e commit 74f7315
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 18 deletions.
2 changes: 1 addition & 1 deletion SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
- [Bab 10: Aplikatif Functors](ch10-id.md)
- [Bab 11: Transformasi Lagi, Secara Alami](ch11-id.md)
- [Bab 12: Melintasi Batu](ch12-id.md)
- [Bab 12: Monoid Menyatukan Semuanya](ch13-id.md)
- [Bab 13: Monoid Menyatukan Semuanya](ch13-id.md)
- [Lampiran A: Dukungan Fungsi Esensial](appendix_a-id.md)
- [Lampiran B: Dukungan Struktur Aljabar](appendix_b-id.md)
- [Lampiran C: Utilitas Pointfree](appendix_c-id.md)
8 changes: 4 additions & 4 deletions ch09-id.md
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ Hukum kedua serupa:
(compose(join, of) === compose(join, map(of))) === id;
```

It states that, for any monad `M`, `of` and `join` amounts to `id`. We can also `map(of)` and attack it from the inside out. We call this "triangle identity" because it makes such a shape when visualized:
Ini menyatakan bahwa, untuk setiap monad `M`, `of` dan `join` berjumlah `id`. Kita juga bisa `map(of)` dan menyerangnya dari dalam ke luar. Kami menyebutnya "triangle identity" karena membuat bentuk seperti itu ketika divisualisasikan.

<img src="images/triangle_identity.png" alt="monad identity law" />

Expand All @@ -444,7 +444,7 @@ Tunggu, saya sedang berpikir... Ya tentu saja! Mereka adalah hukum untuk suatu k

Tapi itu berarti kita membutuhkan fungsi komposisi untuk melengkapi definisi.

Melihat:
Lihat:

```js
const mcompose = (f, g) => compose(chain(f), g);
Expand All @@ -461,7 +461,7 @@ mcompose(mcompose(f, g), h) === mcompose(f, mcompose(g, h));

Bagaimanapun, mereka adalah hukum kategori.

Monad membentuk kategori yang disebut "kategori Kleisli" di mana semua objek adalah monad dan morfisme adalah fungsi yang dirantai.
Monad membentuk kategori yang disebut "kategori Kleisli" di mana semua objek adalah monad dan morfisme adalah fungsi yang di-_chain_.

Saya tidak bermaksud mengejek Anda dengan teori kategori bit dan bobs tanpa banyak penjelasan tentang bagaimana jigsaw cocok bersama.

Expand All @@ -471,7 +471,7 @@ Tujuannya adalah untuk menggores permukaan cukup untuk menunjukkan relevansi dan

Monad memungkinkan kita menelusuri ke bawah ke dalam perhitungan bersarang. Kita dapat menetapkan variabel, menjalankan efek sekuensial, melakukan tugas asinkron, semua tanpa meletakkan satu bata di piramida malapetaka.

Mereka datang untuk menyelamatkan ketika suatu nilai menemukan dirinya dipenjara di beberapa lapisan dengan jenis yang sama. Dengan bantuan sidekick tepercaya "runcing", monads dapat memberi kami nilai tanpa kotak dan tahu kami akan dapat menempatkannya kembali ketika kami selesai.
Mereka datang untuk menyelamatkan ketika suatu nilai menemukan dirinya dipenjara di beberapa lapisan dengan jenis yang sama. Dengan bantuan sidekick tepercaya "pointed", monads dapat memberi kami nilai tanpa kotak dan tahu kami akan dapat menempatkannya kembali ketika kami selesai.

Ya, monad sangat kuat, namun kami masih membutuhkan beberapa fungsi container tambahan.

Expand Down
8 changes: 4 additions & 4 deletions ch10-id.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Nama **functor aplikatif** sangat deskriptif mengingat asal-usul fungsionalnya. Pemrogram fungsional terkenal karena memunculkan nama seperti `mappendor` atau `liftA4` yang tampak sangat alami ketika dilihat di lab matematika, tetapi memiliki kejelasan Darth Vader yang ragu-ragu ketika didorong dalam konteks lain.

Bagaimanapun, nama tersebut harus menjelaskan apa yang diberikan antarmuka ini kepada kita: _kemampuan untuk menerapkan functor satu sama lain_.
Bagaimanapun, nama tersebut harus menjelaskan apa yang diberikan antarmuka ini kepada kita: **kemampuan untuk menerapkan functor satu sama lain**.

Sekarang, mengapa orang normal dan rasional seperti Anda menginginkan hal seperti itu? Apa artinya menerapkan satu functor ke functor lainnya?

Expand Down Expand Up @@ -44,7 +44,7 @@ Bahkan, akan sangat menyenangkan jika kita dapat secara ringkas menerapkan konte

<img src="images/ship_in_a_bottle.jpg" alt="https://www.deviantart.com/hollycarden" />

`ap` adalah fungsi yang dapat menerapkan konten fungsi dari satu fungsi ke konten nilai yang lain. Katakan itu lima kali dengan cepat.
`ap` adalah fungsi yang dapat menerapkan konten fungsi dari satu functor ke konten nilai yang lain. Katakan itu lima kali dengan cepat.

```js
Container.of(add(2)).ap(Container.of(3));
Expand All @@ -68,7 +68,7 @@ Container.prototype.ap = function (otherContainer) {
};
```

Ingat, `this.$value` akan menjadi fungsi dan kami akan menerima fungsi lain sehingga kami hanya membutuhkan `map`. Dan dengan itu kami memiliki definisi antarmuka kami:
Ingat, `this.$value` akan menjadi fungsi dan kami akan menerima functor lain sehingga kami hanya membutuhkan `map`. Dan dengan itu kami memiliki definisi antarmuka kami:

> Functor aplikatif adalah pointed functor dengan method `ap`
Expand Down Expand Up @@ -123,7 +123,7 @@ Kedua panggilan `Http` akan terjadi secara instan dan `renderPage` akan dipanggi

Bandingkan ini dengan versi monadik di mana seseorang harus menyelesaikannya `Task` sebelum tembakan berikutnya. Karena kita tidak memerlukan tujuan untuk mengambil peristiwa, kita bebas dari evaluasi urutan.

Sekali lagi, karena kami menggunakan aplikasi parsial untuk mencapai hasil ini, kami harus memastikan bahwa adalah `renderPage` kari atau tidak akan menunggu kedua `Tasks` smapai selesai.
Sekali lagi, karena kami menggunakan aplikasi parsial untuk mencapai hasil ini, kami harus memastikan bahwa `renderPage` adalah kari, jika tidak, tidak akan menunggu kedua `Tasks` sampai selesai.

Kebetulan, jika Anda pernah melakukan hal seperti itu secara manual, Anda akan menghargai kesederhanaan yang menakjubkan dari antarmuka ini. Ini adalah jenis kode indah yang membawa kita selangkah lebih dekat ke singularitas.

Expand Down
6 changes: 3 additions & 3 deletions ch11-id.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Sampai sekarang, kami telah berhasil menghindari skenario umum ini dengan contoh

Jika kita tidak mengatur tipe kita dengan cermat saat kita melanjutkan, kode kita akan terbaca lebih berbulu daripada _beatnik_ di kafe kucing.

## A Situational Comedy
## Komedi Situasional

```js
// getValue :: Selector -> Task Error (Maybe String)
Expand Down Expand Up @@ -65,7 +65,7 @@ Kita dapat menyusun jenis-jenisnya menjadi satu wadah yang mengerikan, menyortir

Tranformasi alami adalah "morphism antara functors", yaitu, fungsi yang beroperasi pada wadah sendiri.

Ketik, itu adalah fungsi `(Functor f, Functor g) => f a -> g a`. Yang membuatnya istimewa adalah kami tidak bisa, dengan alasan apa pun, mengintip isi functor kami.
Ketik, itu adalah fungsi `(Functor f, Functor g) => f a -> g a`. Yang membuatnya istimewa adalah kami tidak bisa mengintip isi functor kami, dengan alasan apa pun.

Anggap saja sebagai pertukaran informasi yang sangat rahasia - kedua pihak tidak menyadari apa yang ada di dalam amplop manila yang disegel yang dicap "sangat rahasia".

Expand Down Expand Up @@ -167,7 +167,7 @@ Q.E.D. `Promise` dan `Task` yang isomorfik.

Kami juga dapat menulis `listToArray` untuk melengkapi `arrayToList` dan menunjukkan bahwa mereka juga.

Sebagai contoh tandingan, arrayToMa`ybe bukan isomorfisme karena kehilangan informasi:
Sebagai contoh tandingan, `arrayToMaybe` bukan isomorfisme karena kehilangan informasi:

```js
// maybeToArray :: Maybe a -> [a]
Expand Down
12 changes: 6 additions & 6 deletions ch12-id.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Bab 12: Melintasi Batu

Sejauh ini, di _cirque du conteneur_, Anda telah melihat kami menjinakkan functor [functor](./ch08-id.md#functor-pertamaku) yang ganas, membengkokkannya sesuai keinginan kami untuk melakukan operasi apa pun yang sesuai dengan keinginan.
Sejauh ini, di _cirque du conteneur_, Anda telah melihat kami menjinakkan [functor](./ch08-id.md#functor-pertamaku) yang ganas, membengkokkannya sesuai keinginan kami untuk melakukan operasi apa pun yang sesuai dengan keinginan.

Anda telah terpesona oleh juggling banyak efek berbahaya sekaligus menggunakan fungsi [aplikasi](./ch10-id.md) untuk mengumpulkan hasilnya.

Expand Down Expand Up @@ -136,7 +136,7 @@ Jika saya memiliki `[Maybe a]`, itu adalah kumpulan nilai yang mungkin, sedangka

Yang pertama menunjukkan bahwa kita akan memaafkan dan mempertahankan "yang baik", sedangkan yang kedua berarti itu adalah tipe situasi "semua atau tidak sama sekali".

Demikian juga, `Either Error (Task Error a)` bisa mewakili validasi sisi klien dan Task Error (Either Error a)bisa menjadi sisi server. Tipe dapat ditukar untuk memberi kita efek yang berbeda.
Demikian juga, `Either Error (Task Error a)` bisa mewakili validasi sisi klien dan `Task Error (Either Error a)` bisa menjadi sisi server. Tipe dapat ditukar untuk memberi kita efek yang berbeda.

```js
// fromPredicate :: (a -> Bool) -> a -> Either e a
Expand Down Expand Up @@ -179,21 +179,21 @@ Fungsi reduce adalah `(f, a) => fn(a).map(b => bs => bs.concat(b)).ap(f)`, yang

2. `of(new List([]))`

Nilai benih adalah `of(new List([]))`, yang dalam kasus kami adalah `Right([]) :: Either e [a]`. Perhatikan bahwa `Either e [a]` itu juga akan menjadi tipe hasil akhir kita!
Nilai benih adalah `of(new List([]))`, yang dalam kasus kami adalah `Right([]) :: Either e [a]`. Perhatikan bahwa `Either e [a]` itu juga akan menjadi tipe hasil akhir kita!

3. `fn :: Applicative f => a -> f a`

Jika kita menerapkannya pada contoh kita di atas, `fn` sebenarnya `fromPredicate(f) :: a -> Either e a`.

> fn(a) :: Entah ea
> fn(a) :: Either e a
4. `.map(b => bs => bs.concat(b))`

Ketika `Right`, `Either.map` meneruskan nilai yang tepat ke fungsi dan mengembalikan `Right` yang baru dengan hasilnya.

Dalam hal ini fungsi memiliki satu parameter `(b)`, dan mengembalikan fungsi lain (`bs => bs.concat(b)`, di mana `b` dalam ruang lingkup karena closures). Ketika `Left`, nilai kiri dikembalikan.

> fn(a).map(b => bs => bs.concat(b)) :: Entah e ([a] -> [a])
> fn(a).map(b => bs => bs.concat(b)) :: Either e ([a] -> [a])
5. `.ap(f)`

Expand All @@ -205,7 +205,7 @@ Nilai benih adalah `of(new List([]))`, yang dalam kasus kami adalah `Right([]) :

Ketika `Left`, nilai kiri (dari langkah sebelumnya atau iterasi sebelumnya masing-masing) dikembalikan.

> fn(a).map(b => bs => bs.concat(b)).ap(f) :: Entah e [a]
> fn(a).map(b => bs => bs.concat(b)).ap(f) :: Either e [a]
Transformasi yang tampaknya ajaib ini dicapai hanya dengan 6 baris kode yang sangat sedikit di `List.traverse`, dan diselesaikan dengan `of`, `map` dan `ap`, jadi akan berfungsi untuk semua Fungsi Aplikatif.

Expand Down

0 comments on commit 74f7315

Please sign in to comment.