Date: 2009-02-27 11:18 am (UTC)
Мне кажется, что в ограниченной форме лямбда омегу и Хаскелл98 поддерживает. Ну, то есть, наполовину - конструкторы типов есть (List a) :: * -> * (тип, зависящий от типа). Применили к типу Int :: *, получили (List Int) :: *. А лямбда-абстракции для этого дела нету: (\ (a :: *) -> (a -> a)) :: (* -> *) не запишешь. То есть типовый комбинатор D, такой что
D Int возвращает Int -> Int
D Bool возвращает Bool -> Bool
etc

Кстати на data families это можно как-то задать? Я пишу:
data family D :: * -> *

type Arr a b = (->) a b

data instance D b = Arr b b

Теперь в GHCi
*TypeFam> let f1 = (\x -> x) :: Arr Int Int
*TypeFam> :t f1
f1 :: Int -> Int
*TypeFam> let f2 = (\x -> x) :: D Int

:1:10:
    The lambda expression `\ x -> x' has one argument,
    but its type `D Int' has none
    In the expression: (\ x -> x) :: D Int
    In the definition of `f2': f2 = (\ x -> x) :: D Int
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 25th, 2025 06:32 pm
Powered by Dreamwidth Studios