2010-08-04 31 views
7

Tôi có rất nhiều mã của phong cách:Trong Haskell, kết hợp "trường hợp" và ">> ="

do 
    x <- getSomething 
    case x of 
    this -> ... 
    that -> ... 
    other -> ... 

Bất kỳ cách nào tôi kết hợp các "x < - ..." và "trường hợp x của "dòng để loại bỏ sự cần thiết cho một biến?

+4

Tôi muốn 'case of' là viết tắt của' \ x -> case x of'. – dave4420

Trả lời

6

Bạn có thể sử dụng toán tử liên kết >>= để đặt đường ống x.

import System.Environment (getArgs) 

main :: IO() 
main = getArgs >>= process 
    where process ["xxx"] = putStrLn "You entered xxx" 
      process ["yyy"] = putStrLn "You entered yyy" 
      process _  = putStrLn "Error" 
0

Tôi làm điều này như

foo "this" = return 2 
foo "that" = return 3 

main = foo =<< getSomething 

Những điều tốt đẹp về cách tiếp cận này là nếu foo là tinh khiết thì đây trở thành

main = foo <$> getSomething 

Vì vậy, các mã vẫn giữ được hình dạng tương tự cho hơi khác nhau hoàn cảnh.

0

Nếu bạn muốn một cái gì đó rất gần:

getSomething >>= caseOf 
    this -> expr1 
    that -> expr2 
    other -> expr3 

Sau đó, tôi nghĩ rằng bạn chỉ cần ra khỏi may mắn - không có cú pháp như vậy trong Haskell. Nhưng biết bạn không đơn độc. Mark Jones đã xác định ngôn ngữ Habit để bao gồm một loại trường hợp đơn thuần với cú pháp:

case<- getSomething of 
    Nothing -> expr1 
    Just x -> expr2 x 

Ông đề cập đến điều này dưới dạng tuyên bố "Trường hợp-Từ" trong định nghĩa ngôn ngữ.

Các vấn đề liên quan