Trong chương trình Haskell của tôi tôi có một ADT với nhiều nhà xây dựng:Cách xác định hàm tạo của dữ liệu từ mã nước ngoài?
data MyData = Con1 |
Con2 |
...
Con20
Tôi có một chức năng foreign export ccall
, mà kết thúc tốt đẹp [MyData]
vào mảng của StablePtr's
. Sau khi gọi nó, tôi cần phải xác định constructor nào đã được sử dụng để xây dựng từng phần tử.
Nó có thể được giải quyết theo cách này
foreign export ccall getType :: StablePtr MyData -> IO CInt
getType (Con1) = return 1
getType (Con2) = return 2
...
nhưng sau đó tôi sẽ cần phải tự xác định các hằng số trong phần đầu C. Điều này là dễ bị lỗi, vì vậy tôi tự hỏi nếu có một cách để làm cho GHC làm công việc này cho tôi.
Xin lỗi, không hiểu. Làm cách nào để tôi biết nhà xây dựng nào đề cập đến một số thẻ? – arrowd
Bạn không - nó được đưa ra theo thứ tự liệt kê. Tuy nhiên, bạn đã mất tất cả thông tin đó ở phía C, vì vậy bạn phải dựa vào một ánh xạ không an toàn. –
Vì vậy, không thể tự động tạo bản đồ đó? – arrowd