LINUX.ORG.RU

История изменений

Исправление AndreyKl, (текущая версия) :

Т.е. у нас есть тип который мы хотим определить. Пусть это будет тип А. И пусть так же есть функция hello принимающая значение типа int и возвращающая void.

Тогда положим для java у нас получается что то вроде

interface interfaceA {
  int hello(int i);
}

class A implements interfaceA {
  int hello(int i) {...}
}


Для хаскеля нужно изменить сигнатуру hello на что то вроде
hello :: InterfaceA -> Integer -> Integer


при этом сам InterfaceA нужно видимо определить как класс типов
typeclass InterfaceA where
  hello :: InterfaceA -> Integer -> Integer


тогда «наследующий» код выглядит так
instance InterfaceA A where
  hello a i = undefined


В общем-то я не понимаю аргументов.
По моему аналогичная ситуация. хочешь чтобы A реализовывало InterfaceA - объявляешь его инстансом и реализуешь все функции.

Или я не о том говорю?

UPD. Правда вот тут осознаю что кто из них шаблоны, кто дженерики, для меня тёмный лес. Т.е. дженерики - это штуки из явы, которые Array<A> array ? Или имеется ввиду GenericHaskell? И кто такие шаблоны? Всегда для себя считал что шаблоны с++ это как раз то что называется Generics в ява (и в общем-то использовал их именно так, правда практики немного). А тут чёрт разберёт что вы имеете ввиду все.

Исправление AndreyKl, :

Т.е. у нас есть тип который мы хотим определить. Пусть это будет тип А. И пусть так же есть функция hello принимающая значение типа int и возвращающая void.

Тогда положим для java у нас получается что то вроде

interface interfaceA {
  int hello(int i);
}

class A implements interfaceA {
  int hello(int i) {...}
}


Для хаскеля нужно изменить сигнатуру hello на что то вроде
hello :: InterfaceA -> Integer -> Integer


при этом сам InterfaceA нужно видимо определить как класс типов
typeclass InterfaceA where
  hello :: InterfaceA -> Integer -> Integer


тогда «наследующий» код выглядит так
instance InterfaceA A where
  hello a i = undefined


В общем-то я не понимаю аргументов.
По моему аналогичная ситуация. хочешь чтобы A реализовывало InterfaceA - объявляешь его инстансом и реализуешь все функции.

Или я не о том говорю?

UPD. Правда вот тут осознаю что кто из них шаблоны, кто дженерики, для меня тёмный лес. Т.е. дженерики - это штуки из явы, которые Array<A> array ? Или имеется ввиду GenericHaskell? И кто такие шаблоны? Всегда для себя считал что шаблоны с++ это как раз то что называется Generics в ява. А тут чёрт разберёт что вы имеете ввиду все.

Исправление AndreyKl, :

Т.е. у нас есть тип который мы хотим определить. Пусть это будет тип А. И пусть так же есть функция hello принимающая значение типа int и возвращающая void.

Тогда положим для java у нас получается что то вроде

interface interfaceA {
  int hello(int i);
}

class A implements interfaceA {
  int hello(int i) {...}
}


Для хаскеля нужно изменить сигнатуру hello на что то вроде
hello :: InterfaceA -> Integer -> Integer


при этом сам InterfaceA нужно видимо определить как класс типов
typeclass InterfaceA where
  hello :: InterfaceA -> Integer -> Integer


тогда «наследующий» код выглядит так
instance InterfaceA A where
  hello a i = undefined


В общем-то я не понимаю аргументов.
По моему аналогичная ситуация. хочешь чтобы A реализовывало InterfaceA - объявляешь его инстансом и реализуешь все функции.

Или я не о том говорю?

UPD. Правда вот тут осознаю что кто из них шаблоны, кто дженерики, для меня тёмный лес. Т.е. дженерики - это штуки из явы, которые Array<A> array ? Или имеется ввиду GenericHaskell? И кто такие шаблоны?

Исправление AndreyKl, :

Т.е. у нас есть тип который мы хотим определить. Пусть это будет тип А. И пусть так же есть функция hello принимающая значение типа int и возвращающая void.

Тогда положим для java у нас получается что то вроде

interface interfaceA {
  int hello(int i);
}

class A implements interfaceA {
  int hello(int i) {...}
}


Для хаскеля нужно изменить сигнатуру hello на что то вроде
hello :: InterfaceA -> Integer -> Integer


при этом сам InterfaceA нужно видимо определить как класс типов
typeclass InterfaceA where
  hello :: InterfaceA -> Integer -> Integer


тогда «наследующий» код выглядит так
instance InterfaceA A where
  hello a i = undefined


В общем-то я не понимаю аргументов.
По моему аналогичная ситуация. хочешь чтобы а реализовывало interfaceA - объявляешь его инстансом и реализуешь все функции.

Или я не о том говорю?

UPD. Правда вот тут осознаю что кто из них шаблоны, кто дженерики, для меня тёмный лес. Т.е. дженерики - это штуки из явы, которые Array<A> array ? Или имеется ввиду GenericHaskell? И кто такие шаблоны?

Исходная версия AndreyKl, :

Т.е. у нас есть тип который мы хотим определить. Пусть это будет тип А. И пусть так же есть функция hello принимающая значение типа int и возвращающая void.

Тогда положим для java у нас получается что то вроде

interface interfaceA {
  int hello(int i);
}

class A implements interfaceA {
  int hello(int i) {...}
}


Для хаскеля нужно изменить сигнатуру hello на что то вроде
hello :: InterfaceA -> Integer -> Integer


при этом сам InterfaceA нужно видимо определить как класс типов
typeclass InterfaceA where
  hello :: InterfaceA -> Integer -> Integer


тогда «наследующий» код выглядит так
instance InterfaceA A where
  hello a i = undefined


В общем-то я не понимаю аргументов.
По моему аналогичная ситуация. хочешь чтобы а реализовывало interfaceA - объявляешь его инстансом и реализуешь все функции.

Или я не о том говорю?