2017-02-20 6 views
1

Я читаю что-то о монаде без опыта в Haskell и путают с понятием конструктора типов.В чем разница между конструкторами типов в Haskell и java generic типа?

Монада это тройка (M, unitM, bindM), состоящий из типа конструктора M и пару полиморфных функций.

unitM :: a -> M a 

bindM :: M a -> (a -> M b) -> M b 

В Java:

public class M<T> { 
    static <T> M<T> unit(T a) 
    static <T,R> M<R> bind(M<T> a, Function<T,M<R>> f) 
} 

Я считал, что они такие же, конструктор типа только что-то вроде универсального типа в Java, я прав? Если нет, какая разница?

+0

в Java тип будет именем класса –

+1

Ну, это было бы более похоже на класс 'interface', или, по крайней мере, * abstract *. – Bakuriu

ответ

5

Вы меня не сбиваете с толку. Это выглядит необычно точный перевод на Java класса Hadell's Monad.

В Haskell «тип» представляет собой конкретный тип без каких-либо ипа заданных параметров, как Integer, M<String> или M<T> для любого фиксированного T. Что-то с одним или несколькими оставшимися параметрами, например, M, является «конструктором типа», поскольку он похож на конструктор для типов: ему нужно дать один аргумент типа (значение для T), чтобы создать конкретный тип.

Смежные вопросы