@Patrick: as a note I have just reverted your suggested change about 
keeping one loop level only. In your implementation if the previous pipe 
(`pipeRead`) fails with a Left, the game exits whereas the intended 
behavior is to keep running it displaying the left msg.

On Monday, May 12, 2014 5:19:50 PM UTC+2, Pierre R wrote:
>
> I have just updated the code (on my repo that contains MVC.hs) so that the 
> end of game is now considered a Right value.
>
> So I have introduced the type:
> data ScoreBoard = Done Int | Current (Int, Board) deriving (Show, Eq)
>
> and `score` has now this signature:
> score :: Int -> Board -> Either String ScoreBoard
>
> These changes have cleaned up the MVC code a bit (for instance it does not 
> need to know about `isGameOver` anymore)
>
> `pipeScore` is even more stupid than before so there  must be a better way 
> to re-conciliate the APIs.
>
> pipeScore :: (Monad m) => Board -> Pipe (Either String Int) (Either String 
> ScoreBoard) m ()
> pipeScore =  go
>     where
>         go b =  do
>             for cat $ \x -> case x of
>                 Left s -> yield (Left s)
>                 Right n -> do
>                     case score n b of
>                         Right c@(Current (_, b')) -> do
>                             yield (Right c)
>                             go b'
>                         Right (Done s) ->
>                             yield $ Right (Done s)
>                         Left msg -> do
>                             yield (Left msg)
>                             go b
>
>
> @Patrick, my repos contain the merged code:
> https://github.com/PierreR/afgame/tree/master/haskell
>
> I will probably follow your advice about  keeping only one level of loop. 
> I still don't get how to apply `right` from pipe-extra though (your 
> pipeScore' doesn't compile). I will give it another try as soon as I 
> understand this better. Thanks for your help.
>
> Cheers
>
> On Sunday, May 11, 2014 2:39:50 PM UTC+2, Davorak wrote:
>>
>> @Tony - I am getting a 404 for that link[1].  The base repo is there by I 
>> can not find the MVC example with a github search.
>>
>> [1]
>> https://github.com/tonyday567/afgame/blob/mvc-example/haskell/src/Afgame/MVC.hs
>>
>> On Wed, May 7, 2014 at 10:51 PM, Tony Day <[email protected]> wrote:
>>
>>> Hi Pierre,
>>>
>>> I coded up your front-end in the spirit of Gabe's mvc library.  I know 
>>> you didn't ask that, of course, but G has asked for examples of using the 
>>> mvc library and your example was perfect for the task.
>>>
>>>
>>> https://github.com/tonyday567/afgame/blob/mvc-example/haskell/src/Afgame/MVC.hs
>>>
>>> I liked how it turned out.  Most of the IO in the existing pipes became 
>>> messages that get wrapped as part of an Either String (Int,Board).  Not 
>>> perfect but, with the pipeline getting a bit messier.
>>>
>>> Most fun was using quickcheck on the game logic.  I can guess from qc 
>>> that the game lasts for 15 moves, that a high score is around 200, and that 
>>> moves of 15 and consecutive moves that add up to 15 are strong.  Not bad 
>>> considering I haven't even read the rules!
>>>
>>>
>>> On Tuesday, May 6, 2014 5:32:37 AM UTC+10, Pierre R wrote:
>>>>
>>>> Hi,
>>>>
>>>> I have added a little pipes frontend to one of my pet example and I was 
>>>> wondering how idiomatic (or not) it is.
>>>>
>>>> http://lpaste.net/103623
>>>>
>>>> Basically instead of consuming a list with mapM (the `scores` function) 
>>>> I am streaming input from stdin. Consequently I need to treat the end of 
>>>> game differently than a bogus shot.
>>>>
>>>> Nothing to do with Pipes but I am not sure annotation 2 is better 
>>>> because it forces all client `score` code to unwrap StateT whereas I only 
>>>> need the state monad when I have to deal with a list of shots. Is there a 
>>>> more idiomatic way to do this ?
>>>>
>>>> The github repo is here : https://github.com/PierreR/
>>>> afgame/tree/master/haskell
>>>>
>>>> Thanks for your feedback
>>>>
>>>  -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Haskell Pipes" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>>
>>
>>
>>
>> -- 
>> Patrick Wheeler
>> [email protected]
>> [email protected]
>> [email protected] 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Haskell Pipes" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].

Reply via email to