Я только начинаю изучать Хаскелл. Я видел много примеров интро, объясняющих основы типов, но они часто имеют оператор deriving
под типом. Вот пример из главы 3 RealWorldHaskell:
data Cartesian2D = Cartesian2D Double Double
deriving (Eq, Show)
data Polar2D = Polar2D Double Double
deriving (Eq, Show)
Они объясняют, как это получается в главе 6, которая помогает вам узнать, как она используется.
Насколько я понимаю, deriving (Show)
необходимо сообщить Haskell, как превратить ваш тип в строку. Это имеет смысл на практическом уровне. Я исхожу из земли JavaScript, так что мне легко было бы представить, что это будет реализовано так:
Polar2D.prototype.toString = function(){
return '[Polar2D]';
};
В Haskell они приводят пример того, как реализовать собственный Show
для типа Color
, вместо использования deriving
.
data Color = Red | Green | Blue
instance Show Color where
Red = "red"
Green = "green"
Blue = "blue"
Это означает, что когда ваш в ghci
repl, вы можете сделать:
> show Red
"red"
Но это не объясняет, что на самом деле делает deriving
, это все еще волшебство для меня.
Мой вопрос: что происходит под капотом с deriving
? Кроме того, есть ли место в GitHub в источнике Haskell, где вы можете увидеть реализацию? Это также может быть полезно.