
damn that lazy evaluation! LMAO ...a good point brent and yuo have no
doubt saved me hours of head scratching this evening when I try out the
"new improved software". Oh dear oh dear oh dear...
doOption dev (Forward n) = do
putStrLn $ "> STEP FORWARD " ++ (show n)
stepBits dev ioPORTA [3..0]
doOption dev (Backward n) = do
putStrLn $ "> STEP BACKWARD " ++ (show n)
stepBits dev ioPORTA [0..3]
stepBits dev port = mapM_ stepIt
where stepIt bit = mapM_ (\s -> HW.setPortBit dev port bit s >>
stepDelay) [0,1]
I now have the above as my current "final" implementation... hopefully that
*does* do what I think it does because mapM_ is driving it and will cause
evaluation of the actions?
On 29 April 2013 15:56, Brent Yorgey
On Mon, Apr 29, 2013 at 02:59:29PM +0100, emacstheviking wrote:
I have built a library for using the Hexwax expandIO-USB chip and I have now got some code to drive a stepper motor:
doOption :: HWHandle -> Flag -> IO () doOption dev (Backward n) = do putStrLn $ "> STEP BACKWARD " ++ (show n) let x = [ stepBit b | b <- [3..0]] return () where stepBit p b = setBit p b 0 >> setBit p b 1 where setBit p b s = HW.setPortBit dev p b s >> stepDelay
The other posted solutions are good, but I also want to make a very important comment about the above code: it does not actually step any bits! All it does is print some stuff. x is simply a name for a list of IO actions; it is never used so it just gets garbage collected and the IO actions are never run.
-Brent
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners