Vì vậy, tôi có một kiểu dữ liệu kiểu như:Kiểm tra xem Haskell biến phù hợp với lựa chọn kiểu dữ liệu do người dùng định nghĩa
data Token = NUM Int | ID String | EOF
và tôi có một chức năng loại giống như:
doStuff list = let
(token, rest) = getToken list
in
....
Vì vậy, những gì tôi muốn làm trong phần ...
là thử nghiệm nếu mã thông báo tôi nhận được là NUM
hoặc INT
hoặc EOF
. Tôi có thể nói token==EOF
để kiểm tra trường hợp đó, nhưng tôi không thể tìm ra cách để kiểm tra xem mã thông báo có là NUM
hoặc INT
sử dụng điều kiện không, vì token==(NUM n)
và token==NUM
cả hai đều dẫn đến lỗi. Tôi biết rằng tôi có thể viết một hàm trợ giúp để thực hiện các công cụ trong ...
và tận dụng lợi thế của mẫu phù hợp, nhưng điều đó thực sự làm tổn hại đến khả năng đọc của những gì tôi đang làm, và có vẻ như có một cách để thực hiện việc kiểm tra này. Có ai biết không?
Làm cách nào để bạn có được giá trị? Hình như bạn ném chúng đi đây ... – mergeconflict
@mergeconflict Nếu bạn muốn các giá trị, bạn không sử dụng thủ thuật này, tất nhiên. =) Nhưng nó nghe từ câu hỏi như anh ta chỉ muốn kiểm tra xem constructor nào đã được sử dụng. –
@mergeconflict bạn có thể chọn lọc các vals như thế này: 'dữ liệu Mã thông báo = NUM {n, m :: Int}' --- 'mã thông báo trường hợpVal of Num {n = n '} -> foo n'' –