Examples of using Fmap in Vietnamese and their translations into English
{-}
-
Colloquial
-
Ecclesiastic
-
Computer
Và sau đây là kiểu của fmap.
Thực ra, fmap chỉ có thể được xác định theo bind và return.
Đây là định nghĩa chung của fmap.
Nếu viết fmap f( fmap g Nothing), ta sẽ thu được Nothing, với cùng lý do.
Như vậy nó khá giống với fmap!
Kiểu fmap( replicate 3)::( Functor f)=gt; f a-gt; f[ a] có nghĩa là hàm này sẽ hoạt động với bất kì functor nào.
Sau đây là cáchviết lại hàm này có dùng fmap.
Điều này có thể khó hiểu,vì vậy đây là một hình ảnh về cách fmap hoạt động trở lại với plus3 trong hình này.
Biểu thức fmap(* 2) là một hàm nhận vào một functor f trên các số rồi trả về một functor cũng trên các số.
Như vậy từ hai phương trình trong phần thực hiện của fmap, ta đã thấy rằng định luật fmap id= id được thỏa mãn.
Cũng như khi ta fmap reverse đối với Just" blah" để thu được Just" halb", ta có thể fmap reverse đối với getLine.
Sau khi định nghĩa nó, ta biến nó thành một thực thể của Functor và bằng việc này đã giành khả năng fmap hàm đối với cây.
Lưu ý rằng vì về cơ bản fmap trả về một bản sao mới của container tại mỗi lần gọi, nên nó có thể được coi là không thay đổi.
Nếu ta xem functor như là thứ có thể được ánh xạ lên, thì định luật fmap id= id có vẻ quá tầm thường, hoặc dễ thấy.
Nếu ta muốn CMaybe tuân theo các định luật functor, thì ta phải làm sao chotrường Int vẫn giữ nguyên khi ta dùng fmap.
Nếu ta dùng fmap( replicate 3) với một danh sách, thì dạng fmap thực hiện với danh sách sẽ được chọn lấy, vốn đơn giản chỉ là map.
Việc này cũng đảm nhiệm luôn cảtrường hợp mà tham số thứ hai là Nothing, vì việc fmap với bất kì hàm nào lên Nothing sẽ trả lại Nothing.
Khi ta dùng fmap(+ 3) lên Just 3, có thể dễ dàng tưởng tượng Maybe như là một cái hộp chứa thứ gì đó mà ta sẽ áp dụng hàm(+ 3).
Nhưng dường như không có cách nào để làm điều tựa như vậy với( a, b) vì vậy tham số kiểu a rút cục sẽ làthứ thay đổi khi ta dùng fmap.
Biểu thức fmap( replicate 3) sẽ nhận một functor với bất kì kiểu nào và trả lại một functor trên một danh sách các phần tử có cùng kiểu đó.
Trong Haskell, chúng được mô tả bởi lớp Functor, vốn chỉ có duy nhất một phương thức tên là fmap, vốn có kiểu fmap::( a-gt; b)-gt; f a-gt; f b.
Mục đích của việc có fmap trả về cùng loại( hoặc bọc kết quả lại vào một thùng chứa) là để chúng ta có thể tiếp tục các hoạt động chuỗi.
Nếu bạn đã từng ở vào tình trạng cần gắn kết quả của một thao tác I/ O vào một tên gọi, chỉ để áp dụng một hàm cho nó và gọi thứ mới tạo ra bằng một tên khác,thì bạn có thể dùng fmap, vì nó trông đẹp hơn.
Ta thấy rằng nếu fmap id lên Just x, kết quả sẽ là Just( id x), và vì id chỉ việc trả lại tham số của nó, nên ta có thể suy ra Just( id x) bằng Just x.
Bạn hình dung ra cách mà định luật thứhai thỏa mãn với một kiểu dữ liệu nào đó bằng cách xem xét đoạn mã lệnh thực hiện của fmap đối với kiểu này rồi dùng phương pháp mà ta đã dùng để kiểm tra xem liệu Maybe có tuân theo định luật thứ nhất không.
Hàm fmap lấy một hàm( từ A-gt; B) và hàm Wrapper( ngữ cảnh được bao bọc)( A) và trả về một hàm functor Wrapper( B) mới chứa kết quả của việc áp dụng hàm đã nói lên giá trị và sau đó đóng lại một lần nữa.
Viết ví dụ cụ thể này là( a-gt; b)-gt;( Ta-gt; Tb) nói đúng là chỉ thêm các kýtự không cần thiết, nhưng về mặt đạo đức là" điều đúng để làm" vì nó nhấn mạnh rằng fmap ánh xạ một hàm kiểu a-gt; b đến một hàm của kiểu Ta-gt; Tb.
Bạn có thể hình dung fmap như là một hàm nhận một hàm khác và một functor rồi ánh xạ hàm khác đó lên functor, hoặc cũng có thể hình dung nó như một hàm nhận một hàm khác rồi nâng hàm đó lên để nó hoạt động được với các functor.
Vì vậy, ta không thể viết instance Functor Either where, nhưng lại có thể viết instance Functor( Either a) where và rồi nếu ta hình dung rằng fmap chỉ là dành cho Either a, thì nó sẽ phải có một lời khai báo kiểu là fmap::( b-gt; c)-gt; Either a b-gt; Either a c.
Khi ta xem Maybe như là một functor, ta thấy được rằng nếu muốn fmap một hàm lên nó, thì functor này sẽ bị ánh xạ tất cả các phần tử trong nó, nếu nó là một giá trị Just, còn nếu không thì Nothing được giữ lại vì khi đó không có gì để ánh xạ lên nữa!