Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1.  IO Control Structures (Leonhard Applis)
   2. Re:  IO Control Structures (Francesco Ariis)


----------------------------------------------------------------------

Message: 1
Date: Tue, 23 Apr 2019 14:55:22 +0000
From: Leonhard Applis <leonhard.app...@protonmail.com>
To: "beginners@haskell.org" <beginners@haskell.org>
Subject: [Haskell-beginners] IO Control Structures
Message-ID:
        
<DNoEAi6yxlYTO3tEHrpCzJ6lAdW6JfpqOnneaNwBX1Yt3zKDy5cDLa7qlT3LaEJ7nPI8ah7RG1merMY3P8547jjmMH-MPwEaaM1np6NMwmc=@protonmail.com>
        
Content-Type: text/plain; charset="utf-8"

Hey there,

I am writing a simple game and the only missing part is IO (Sadly, i need that 
to play).

I've got most things pure, e.g. makeMove :: GameState -> Move -> GameState, 
initialBoard:: GameState and lost :: GameState -> Bool work pure and as 
intended.
I also got a function gameLoop :: GameState -> IO GameState which asks for 
Input and applies it.

I don`t know how to do my main :: IO ()
which should welcome the player, start the gameloop, and print godbyes the game 
if it's either won or lost
Here i am missing a control structure, to demonstrate:

show hello
board = initialBoard
while (not end board)
    board = gameLoop board
show winner

I could also make my Gameloop recursive, while i think that i get this working, 
it seems awfully complex (and ugly) to me.

Best regards
Leonhard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20190423/0256a91e/attachment-0001.html>

------------------------------

Message: 2
Date: Tue, 23 Apr 2019 17:32:58 +0200
From: Francesco Ariis <fa...@ariis.it>
To: beginners@haskell.org
Subject: Re: [Haskell-beginners] IO Control Structures
Message-ID: <20190423153258.bsnjkvjfwdpvd...@x60s.casa>
Content-Type: text/plain; charset=us-ascii

Hello Leonhard,

On Tue, Apr 23, 2019 at 02:55:22PM +0000, Leonhard Applis wrote:
> I don`t know how to do my main :: IO ()
> which should welcome the player, start the gameloop, and print godbyes the 
> game if it's either won or lost
> Here i am missing a control structure, to demonstrate:
> 
> show hello
> board = initialBoard
> while (not end board)
>     board = gameLoop board
> show winner
> 
> I could also make my Gameloop recursive, while i think that i get this 
> working, it seems awfully complex (and ugly) to me.

Indeed making gameLoop recursive is the (a) solution.
As now `gameLoop` isn't much of a loop, is it?
If gameLoop has a signature like this:

    gameLoop :: GameState ->                -- Initial State
                (IO Move) ->                -- Input function
                (State -> Move -> State) -> -- Logic function
                (State -> IO ()) ->         -- Blit function
                (State -> Bool)  ->         -- "Should I quit?" function
                IO ()

then main is trivial to write:

    main = do
        show hello
        board = initialBoard
        gameLoop board someInputFun makeMove drawState isOver
        show ciao



------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 130, Issue 7
*****************************************

Reply via email to