Пер Часто задаваемые вопросы по SDL Windows :
Вы должны использовать
main()
вместоWinMain()
, даже если вы создаете приложение Windows, поскольку SDL обеспечивает версиюWinMain()
, которая выполняет некоторую инициализацию SDL перед вызовом вашего основного кода.Если по какой-то причине вам нужно использовать
blockquote>WinMain()
, посмотрите исходный код SDL вsrc/main/win32/SDL_main.c
, чтобы увидеть какую инициализацию вам нужно выполнить в вашей функцииWinMain()
, чтобы SDL работал правильно.SDL требует инициализации, поэтому он вводит свою собственную функцию
main
, которая запускает свою инициализацию перед вызовом ваша «основная» функция, которую она переименовывает вSDL_main
, чтобы она не противоречила фактической функцииmain
. Как отмечено в FAQ, ваша функцияmain
должна иметь видint main(int argc, char* argv[])
Если вы посмотрите здесь , вы увидите, что они определяют это так:
newtype State s a = State { runState :: (s -> (a,s)) }
, чтобы дать имя внутренней лямбде.
Обычный способ - определить newtype newtype S a = S {runState: State -> (a, State)}
. Тогда вместо вашего isntThisAnnoying s (S m)
вы можете написать runState t s
, где t
совпадает с S m
.
Вы должны использовать newtype
, потому что синонимы типов не могут быть экземплярами класса типов.