t
, türünde * -> (* -> *) -> *
sınıfının tiptipidir. Bu,GHC tarafından türetilmiş türüdür, çünkü -XPolyKinds
'un yokluğunda, GHC, tüm tür parametrelerini varsayılan olarak *
türünde dener. Bu nedenle, GHC, a
'un *
türüne sahip olduğunu varsayar (imzanızdaki hiçbir şey bunu tek seçenek haline getirir). tür* -> * -> *
sahiptir (->)
tip yapıcı. j a
, (->)
için bir parametre olarak göründüğünden, j a
, tür *
olmalıdır. GHC, a
'un *
türünde olduğundan, j
, *
türünde bir şey alan ve *
türünde bir şey döndüren bir tür olduğunu varsayar. Böylece: ilk bağımsız a
tür *
sahiptir ve ikinci bağımsız j
tür *->*
çünkü t
yana
j :: * -> *
a
ve j
hem uygulanır, t
, tür * -> (* -> *) -> *
sahiptir ve genel tip t a j
şart Aynı zamanda (->)
türünün bir parametresi olduğundan *
türüne sahiptir.
Sınıflar Foo a b
hariç (sadece data Foo a b
gibi) tipi parametreleri alarak sadece türleridir tür *
Tofu t
ederken tür özel bir tür Constraint
sahiptir vardır. Böylece Tofu
türüdür:
GHC gösterir
(* -> (* -> *) -> *) -> Constraint
olarak. Constraint
sadece kısıtlamalara verilen türdür. imza olarak
(Num a) => a -> a -> a
(Num a)
türConstraint
bir tip olduğunu.
Neredeyse anlıyorum, ama yeni başlıyorum. Biraz detaylandırır mısın? – orome
Aslında: 't tofu''ya bakarsam biraz daha az şifreli. Yine de biraz sisliyim. – orome
bir güncelleme üzerinde çalışıyor – crockeea