>>457
import System.Random

main :: IO ()
main = do
 v <- randomIO :: IO Int
 let a = double v
 print a

double :: Int -> Int
double x = x * 2

main 関数は戻り値が IO () 型で副作用がある。
double 関数は戻り値が Int 型で副作用がない。

副作用がある関数とない関数、それぞれの定義が必然的に明確に分かれる。
(ただし変な事をしない限り)