2011-12-05 29 views
19
word 0 = "Zero" 
word 1 = "One" 
word 2 = "Two" 

Tôi sẽ ngưng tụ một chức năng khớp mẫu như thế này thành một dòng đơn lẻ như thế nào?Cú pháp cho kết hợp mẫu đơn dòng là gì?

Tôi đã thử word 0 = "Zero" word 1 = "One" word 2 = "Two", nhưng điều đó không hiệu quả.

Trả lời

28

Sử dụng dấu chấm phẩy:

word 0 = "Zero"; word 1 = "One"; word 2 = "Two" 
10

Bạn có thể sử dụng một cái gì đó như thế này:

word = (!!) ["Zero", "One", "Two"] 

Tôi không biết nếu nó sẽ chậm hơn so với mô hình kết hợp, mặc dù.

29

Đó là một yêu cầu lạ khi viết một hàm trong một dòng. Dù sao, case cũng có thể hữu ích.

word x = case x of {0 -> "Zero"; 1 -> "One"; 2 -> "Two"} 
3

Một khả năng khác:

data Words = Zero | One | Two deriving (Show, Enum) 

word = show . (toEnum :: Int -> Words) 

hoặc, nếu bạn muốn nó làm việc với các loại khác hơn Int,

word = show . ((toEnum.fromIntegral) :: Integral a => a->Words) 
Các vấn đề liên quan