Объектно-ориентированное программирование на Хаскеле

Я пытаюсь получить представление об объектно-ориентированном программировании в стиле Haskell, зная, что все будет немного по-другому из-за отсутствия изменчивости. Я играл с типами классов, но мое понимание их ограничено ими как интерфейсами. Итак, я написал пример C ++, который представляет собой стандартный бриллиант с чистой основой и виртуальным наследованием.Bat наследуетсяFlying а такжеMammalи обаFlying а такжеMammal унаследоватьAnimal.

#include <iostream>

class Animal
{
public:
    virtual std::string transport() const = 0;
    virtual std::string type() const = 0;
    std::string describe() const;
};

std::string Animal::describe() const 
    { return "I am a " + this->transport() + " " + this->type(); }

class Flying : virtual public Animal 
{
public:
    virtual std::string transport() const;
};

std::string Flying::transport() const { return "Flying"; }

class Mammal : virtual public Animal 
{
public:
    virtual std::string type() const;
};

std::string Mammal::type() const { return "Mammal"; }

class Bat : public Flying, public Mammal {};

int main() {
    Bat b;
    std::cout << b.describe() << std::endl;
    return 0;
}

В основном меня интересует, как перевести такую структуру на Haskell, в основном это позволило бы мне иметь списокAnimalс, как я мог бы иметь массив (умных) указателей наAnimalв C ++.

Ответы на вопрос(4)

Ваш ответ на вопрос