このようにモジュールを自作することが出来る。
-- インポートしたい関数群 -- rectAreaがないことに注意。 -- つまり全ての関数をインポートする必要はない。 module Geometry ( sphereVolume, sphereArea, cubeVolume, cubeArea, cuboidArea, cuboidVolume ) where sphereVolume :: Float -> Float sphereVolume radius = (4.0 / 3.0) * pi * (radius ^ 3) sphereArea :: Float -> Float sphereArea radius = 4 * pi * (radius ^ 2) cubeVolume :: Float -> Float cubeVolume side = cuboidVolume side side side cubeArea :: Float -> Float cubeArea side = cuboidArea side side side cuboidVolume :: Float -> Float -> Float -> Float cuboidVolume a b c = rectArea a b * c cuboidArea :: Float -> Float -> Float -> Float cuboidArea a b c = rectArea a b * 2 + rectArea a c * 2 + rectArea c b * 2 rectArea :: Float -> Float -> Float rectArea a b = a * b
モジュールのインポート
import Geometry
また、階層構造にすることも出来る。
モジュール名を冠したディレクトリを作成する。
Geometry/Cube.hs
module Geometry.Cube ( volume, area ) where import qualified Geometry.Cuboid as Cuboid volume :: Float -> Float volume side = Cuboid.Volume side side side area :: Float -> Float area side = Cuboid.Area side side side
Geometry/Cuboid.hs
module Geometry.Cuboid ( volume, area ) where volume :: Float -> Float -> Float -> Float volume a b c = rectArea a b * c area :: Float -> Float -> Float -> Float area a b c = rectArea a b * 2 + rectArea a c * 2 + rectArea c b * 2 rectArea :: Float -> Float -> Float rectArea a b = a * b
Geometry/Sphere.hs
module Geometry.Sphere ( volume, area ) where volume :: Float -> Float volume radius = (4.0 / 3.0) * pi * (radius ^ 3) area :: Float -> Float area radius = 4 * pi * (radius ^ 2)
モジュールインポート
import Geometry.Sphere