Nhiều combinators Parsec tôi sử dụng là của một loại như:Đằng Parsec Monad
foo :: CharParser st Foo
CharParser
được định nghĩa here như:
type CharParser st = GenParser Char st
CharParser
là như vậy, một từ đồng nghĩa loại liên quan đến GenParser
, bản thân được xác định here là:
type GenParser tok st = Parsec [tok] st
GenParser
là sau đó một loại từ đồng nghĩa, phân công sử dụng Parsec
, được xác định here như:
type Parsec s u = ParsecT s u Identity
Vì vậy Parsec
là một ứng dụng một phần của , tự liệt kê here với loại:
data ParsecT s u m a
cùng với dòng chữ :
"ParsecT suma là trình phân tích cú pháp với st ream type s, kiểu trạng thái người dùng u, monad m cơ bản và kiểu trả về a. "
Đơn nguyên cơ bản là gì? Đặc biệt, khi tôi sử dụng các trình phân tích cú pháp CharParser
là gì? Tôi không thể nhìn thấy nơi nó được chèn vào trong ngăn xếp. Có mối quan hệ nào với việc sử dụng danh sách đơn lẻ trong Monadic Parsing in Haskell để trả lại nhiều phân tích cú pháp thành công từ một trình phân tích cú pháp không rõ ràng không?
Cảm ơn, tôi đã chỉnh sửa câu hỏi của mình để bao gồm bước đó. Vì vậy, nó là cơ sở của biến áp đơn nguyên. Tôi tin rằng không có mối liên hệ nào với việc phân tích cú pháp không rõ ràng được mô tả trong giấy Hutton/Meijer. Vậy việc sử dụng danh sách đơn lẻ đó có xuất hiện ở bất kỳ đâu trong trình phân tích cú pháp Parsec không? Parsec chỉ không mơ hồ? Nếu vậy, được mã hóa bằng cách sử dụng 'Có thể' hoặc 'Hoặc là'? – user2023370
Bản đơn cơ bản không được sử dụng bởi chính parsec, do đó nó không ảnh hưởng đến sự mơ hồ. – augustss
Tôi nghĩ rằng những gì tôi đã cố gắng để hỏi về là mối quan hệ giữa các đơn vị danh sách trong giấy Hutton/Meijer; và [Đã tiêu thụ] (http://hackage.haskell.org/packages/archive/parsec/latest/doc/html/Text-Parsec-Prim.html#t:Consumed) và [Trả lời] (http: // hackage Các loại .haskell.org/packages/archive/parsec/mới nhất/doc/html/Text-Parsec-Prim.html # t: Trả lời) được sử dụng trong Parsec. – user2023370