Viết chương trình Haskell Tôi thấy mình cần một toán tử như thế này.:: a -> (a -> b) -> toán tử b (Haskell)
(|>) :: a -> (a -> b) -> b
(|>) = flip ($)
infixl 0 |>
Tôi nghĩ nó hữu ích khi dán nhiều chức năng cùng nhau.
tText cs = someFun cs |>
lines |>
map (drop 4) |>
reverse
Tôi thích nó hơn .
bởi vì với |>
thứ tự mà các chức năng được áp dụng cũng giống như thứ tự mà các chức năng được viết.
tText' cs = reverse .
map (drop 4) .
lines .
someFun $ cs
Câu hỏi là: là này (|>
) cái gì đó đã tồn tại trong/một số thư viện cơ bản khác Prelude
? Thực hiện lại các công cụ đơn giản là điều gì đó ngớ ngẩn mà tôi muốn tránh.
Tìm kiếm trên Hoogle không hữu ích. Điều gần nhất tôi tìm thấy là >>>
(Mũi tên), nhưng có vẻ như quá mức cần thiết.
Không, nó không, mặc dù như bạn nói '>>>' nào. [Có một câu hỏi SO khác về lý do tại sao F # sử dụng '|>' trong đó Haskell sử dụng '.' và' $ ', điều này khá liên quan.] (Http://stackoverflow.com/questions/1457140/haskell-composition-vs- fs-pipe-forward-operator) (Lưu ý, chỉ để cho vui, với '.' hoặc' >>> ', bạn có thể viết hàm của bạn không có điểm:' tText = reverse. map (drop 4). someFun', hoặc 'tText = someFun >>> dòng >>> map (drop 4) >>> reverse'.) –
Một số thời gian trước đây, đã có một cuộc hội thoại trên danh sách gửi thư về việc thêm nó vào thư viện chuẩn. http://www.haskell.org/pipermail/libraries/2012-November/018832.html –
"thứ tự các hàm được áp dụng giống với thứ tự các hàm được viết." Vâng - đó là loại suy nghĩ mà Haskellers tránh: bạn không chỉ định "làm điều này, sau đó với kết quả thực hiện, sau đó ..." nhưng tập trung vào kết quả _desired_, do đó, hoàn toàn tự nhiên để bắt đầu với bước tính toán cuối cùng. Ngoài ra, những gì với đánh giá lười biếng, bước "cuối cùng" này thực sự sẽ là người đầu tiên được đánh giá! - Đối với các loại chức năng thủ tục, những thứ mà bạn thực sự cần phải suy nghĩ trong các bước tuần tự, Haskell có Monads, có ký hiệu 'do' luôn luôn là" chuyển tiếp ". – leftaroundabout