結城浩のHaskell日記 RSSフィード

2006-06-20

Preludeの関数をhidingで隠す Preludeの関数をhidingで隠す - 結城浩のHaskell日記 を含むブックマーク

ふつけるp.258まで読みました。

Preludeモジュールを明示的にimportしておき、hiding構文を使うとインポートを防止することができます。

たとえば以下のようにmapを定義しようとするとエラーになります。

map _ [] = []
map f (x:xs) = f x : map f xs

GHCiでの実行結果です。

Compiling Main             ( a.hs, interpreted )

a.hs:2:21:
    Ambiguous occurrence `map'
    It could refer to either `Main.map', defined at a.hs:1:0
                          or `GHC.Base.map', imported from Prelude at Implicit import declaration
Failed, modules loaded: none.

以下のようにPreludeモジュールを明示的にimportし、hiding構文でmapを隠します。

import Prelude hiding (map)
map _ [] = []
map f (x:xs) = f x : map f xs

すると、以下のようにエラーがなくなります。

Compiling Main             ( a.hs, interpreted )
Ok, modules loaded: Main.
*Main> take 10 $ map (1+) [1..]
[2,3,4,5,6,7,8,9,10,11]

NicolasNicolas2012/05/02 21:43I thank you humbly for sharing your wdsiom JJWY

cdreogxscdreogxs2012/05/03 11:05VduxB8 <a href="http://tyflweobseaf.com/">tyflweobseaf</a>

トラックバック - http://haskell.g.hatena.ne.jp/hyuki/20060620