• # Quelques erreurs (mineures) dans le programme des philosophes

    Posté par . En réponse à la dépêche Sortie de GHC 8.2.1. Évalué à 4.

    Tout d’abord, merci pour cette dépêche très bien construite et qui me fait regretter de ne pas utiliser plus ce langage.

    Il y a une typo dans les imports, c’est Options.Generic, non Option.Gereric (notez le s).

    Ensuite, la signature de la fonction forkPhilosopher ne correspond pas à ce que fait la fonction. Le type de forkIO est IO () -> IO ThreadId et non IO () -> IO (). La signature de forkPhilosopher doit donc être la suivante:

    forkPhilosopher :: Philosopher -> IO ThreadId
    forkPhilosopher p = forkIO (forever (runPhilosopher p))

    Pour que ceci fonctionne, il faut également importer ThreadId depuis Control.Concurrent :

    import Control.Concurrent (forkIO, killThread, threadDelay, ThreadId)

    Une fois ces petite ajustements faits, ça marche très bien !