Giả sử tôi muốn soạn Text.pack
với Text.strip
.Tại sao thành phần chức năng yêu cầu dấu ngoặc đơn?
:t (.)
sản xuất: (b -> c) -> (a -> b) -> a -> c
:t (Text.pack)
sản xuất: String -> Text
:t (Text.strip)
sản xuất: Text -> Text
Vì vậy, thay strip
cho (b -> c)
cho: b = Text
c = Text
Thay pack
cho (a -> b)
cho: a = String
b = Text
Cho phép xác minh: :t strip . pack
sản xuất: strip . pack :: String -> Text
ok, tuyệt vời cho phép thử nó:
strip.pack " example "
Tạo:
Couldn't match expected type ‘a -> Text’ with actual type ‘Text’
Relevant bindings include
it :: a -> Text (bound at <interactive>:31:1)
Possible cause: ‘pack’ is applied to too many arguments
In the second argument of ‘(.)’, namely ‘pack " example "’
In the expression: strip . pack " example "
(strip . pack) " example "
hoạt động như dự kiến .... tại sao?
Thậm chí mạnh mẽ hơn, ứng dụng chức năng có mức độ ưu tiên cao hơn * mọi thứ khác *. – amalloy
@amalloy ... ngoại trừ bản ghi cập nhật. = P –
Ưu tiên này cho phép, ví dụ: 'lọc ngay cả. bản đồ (+5) '. Soạn các hàm được áp dụng một phần là khá thành ngữ. Cũng lưu ý rằng thứ tự của các đối số cho 'map, filter, ...' đã được chọn để làm cho việc này trở nên thuận tiện. – chi