Haskell: вывод типа и композиция функций

Возможно, Вы могли сделать метод, который создает таймер?

void onButtonClick(object sender, EventArgs e)
{
    Delay(1000, (o,a) => MessageBox.Show("Test"));
}

static void Delay(int ms, EventHandler action)
{
    var tmp = new Timer {Interval = ms};
    tmp.Tick += new EventHandler((o, e) => tmp.Enabled = false);
    tmp.Tick += action;
    tmp.Enabled = true;
}
15
задан Community 23 May 2017 в 11:50
поделиться

2 ответа

Почему Haskell определяет такой конкретный тип для функции?

GHCi использует тип по умолчанию , чтобы вывести более конкретный тип из набора возможные. Вы можете легко избежать этого, отключив ограничение мономорфизма ,

Prelude> :set -XNoMonomorphismRestriction
Prelude> let removeall = filter . (/=)
Prelude> :t removeall 
removeall :: (Eq a) => a -> [a] -> [a]
28
ответ дан 1 December 2019 в 00:37
поделиться

Также стоит отметить, что если вы не присваиваете имя выражению, проверка типов, похоже, избегает установки типа по умолчанию:

Prelude> :t filter . (/=)
filter . (/=) :: (Eq a) => a -> [a] -> [a]
17
ответ дан 1 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: