Jak wiem, ->
ma rodzaj *->*->*
, a ((->) r)
ma rodzaj *->*
.Dosłowne literał w Haskell
Zakładając, że istnieje typ (a->b->c)
, czy istnieje sposób na przedstawienie (a->b->)
?
Próbowałem ((->) a ((->) b))
, ale to błąd.
Próbowałem:
type Kab a b c = (a -> b -> c) -- it is ok
Ale to jest nie używać Kab
w deklaracji instancji:
instance KClass (Kab a b) where -- error
Jedynym sposobem, znalazłem, że działa to zadeklarować data
:
data Kab a b c = Kab (a -> b -> c)
instance KClass (Kab a b) where ..
Ale jeśli używam danych, muszę odwijać Kab
, natomiast moim pomysłem jest wdrożenie KClass na natywnym typie funkcji.
Jak to zrobić?
* Tak więc komitet Haskell zdecydował się go pominąć. * Czy możesz dodać jakieś odniesienie? – Jubobs
@Jubobs Nie jestem pewien, co dokładnie chcesz zobaczyć tutaj. W raporcie nie ma lambdas na poziomie typu; ale to nie jest jakaś sekcja, w której się nie ma lub coś takiego. –
Typ wnioskowania z typem lambdas jest rozstrzygalny dla fragmentu wzoru Millera, który zawiera wszystkie rzeczy, które mamy z aktualnymi konstruktorami typu Haskella. Myślę, że lepiej jest powiedzieć, że nie mamy typu lambdas w Haskell, ponieważ nie było na to zbyt dużej potrzeby, a pisanie zależne było eksperymentalną przestrzenią projektową do niedawna. –