Объектно-ориентированное программирование на Хаскеле
Я пытаюсь получить представление об объектно-ориентированном программировании в стиле 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 ++.