import Data.Char import Foreign -- import System.IO f589_1 :: IO () f589_1 = do a <- addr (12 :: Int) p_a <- addr a b <- addr (3.45 :: Float) p_b <- addr b prn "a" a prn "p_a" p_a prn "b" b prn "p_b" p_b free a >> free p_a >> free b >> free p_b where addr a = malloc >>= \p -> poke p a >> return p prn x i = do v <- peek i putStrLn $ x ++ "のアドレスは、" ++ show i putStrLn $ x ++ "の値は、" ++ show v f589_2 :: IO () f589_2 = do let c = 'A' p <- malloc poke p c peek p >>= putStrLn . (:[]) peek p >>= poke p . chr . (+2) . ord peek p >>= putStrLn . (:[]) free p main :: IO () main = -- hSetEncoding stdout utf8 >> f589_1 >> f589_2