Передача списка пользовательских типов данных из Haskell в переполнение стека

Я использую функции 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 ++?

Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …