import Control.Applicative import Control.Monad import Foreign import Prelude hiding ((*), (+)) (=&) = poke infixr 1 *= (*=) a b = poke a =<< b (+) c i = foldr (.) id (replicate i succ) <$> c (*) = peek printf = snd >=> putStrLn . (:[]) (=.) _ _ = return () char _ = 0 infixr 0 // (//) f _ = f >> return () (*) _ _ = return () (%) f = malloc >>= (>>) <$> (f 'A') <*> free {-#include-} {-int-} main = (%) $ \c p -> do { char c =. 'A'; char* p // "ポインタ変数の宣言"; p =& c // "変数(c) の番地を設定"; printf("%c\n", (*)p) // "ポインタ変数から文字表示"; p *= (*)p + 2 // "ポインタ変数から値を変更"; printf("%c\n", (*)p) // "ポインタ変数から文字表示"; return 0; }