Функтор / Аппликативные экземпляры для State в Haskell

Пер Часто задаваемые вопросы по SDL Windows :

Вы должны использовать main() вместо WinMain(), даже если вы создаете приложение Windows, поскольку SDL обеспечивает версию WinMain(), которая выполняет некоторую инициализацию SDL перед вызовом вашего основного кода.

Если по какой-то причине вам нужно использовать WinMain(), посмотрите исходный код SDL в src/main/win32/SDL_main.c, чтобы увидеть какую инициализацию вам нужно выполнить в вашей функции WinMain(), чтобы SDL работал правильно.

blockquote>

SDL требует инициализации, поэтому он вводит свою собственную функцию main, которая запускает свою инициализацию перед вызовом ваша «основная» функция, которую она переименовывает в SDL_main, чтобы она не противоречила фактической функции main. Как отмечено в FAQ, ваша функция main должна иметь вид

int main(int argc, char* argv[])

11
задан danportin 20 August 2010 в 18:59
поделиться

2 ответа

Если вы посмотрите здесь , вы увидите, что они определяют это так:

newtype State s a = State { runState :: (s -> (a,s)) }

, чтобы дать имя внутренней лямбде.

11
ответ дан 3 December 2019 в 07:35
поделиться

Обычный способ - определить newtype newtype S a = S {runState: State -> (a, State)} . Тогда вместо вашего isntThisAnnoying s (S m) вы можете написать runState t s , где t совпадает с S m .
Вы должны использовать newtype , потому что синонимы типов не могут быть экземплярами класса типов.

5
ответ дан 3 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

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