Я использую функции Haskell в программе C ++ с foreign export ccall
,
Легко передавать базовые типы с одного языка на другой, но как я могу передать более сложные типы, подобные этому:
piecesList::[Piece]
piecesList = [Piece _type _color _coords, ..., ... Piece _type _color _coords]
с :
data Piece = Piece {
_type :: PieceType,
_color :: PieceColor,
_position :: Position
} deriving Eq
data PieceColor = Black | White deriving Eq
data PieceType = Rook | Knight | Bishop | King | Queen | Pawn deriving Eq
type Position = (Int, Int)
Если я делаю (например):
get_piecesList::[Piece]
get_piecesList = piecesList
а также
foreign export ccall get_piecesList :: [Piece]
Я получил:
Unacceptable result type in foreign declaration:
‘[Piece]’ cannot be marshalled in a foreign call
• When checking declaration:
foreign export ccall "get_piecesList" get_piecesList :: [Piece]
Как я могу передать такие данные, и как я могу обрабатывать их в C ++?
Спасибо
Задача ещё не решена.
Других решений пока нет …