[Haskell-beginners] Conciseness question
Manfred Lotz
manfred.lotz at arcor.de
Sun Aug 7 21:55:58 CEST 2011
On Sun, 7 Aug 2011 18:55:37 +0200
Ertugrul Soeylemez <es at ertes.de> wrote:
Thanks a lot for your suggestions.
>
> This is possible in Haskell using the mapM_ function, but it doesn't
> really solve your problem. What you need is a foldable data
> structure, which gives its entries names. As suggested earlier,
> Data.Map gives you such a structure. You can define a custom index
> type like this:
>
> data AppDir
> = ConfigAppDir
> | DataAppDir
> | OtherAppDir
> deriving Ord
>
> Then you can create a map from AppDir to a string:
>
> import Data.Map (Map)
>
> type AppDirs = Map AppDir FilePath
>
> This is a foldable data structure. Instead of mapM_ from the Prelude
> you can now use mapM_ or forM_ from Data.Foldable. To access
> individual directories you can either use safe lookups or unsafe
> lookups:
>
> import Data.Map (Map, (!), lookup)
>
> lookup ConfigAppDir myDirs
> myDirs ! ConfigAppDir
>
This is the solution I like. I have to accept that here I cannot reach
the conciseness of which might be due to Haskell being strongly typed.
> The former is the safe variant giving you a Maybe String, while the
> latter is the unsafe variant, which throws an exception, if the
> directory in question is not present.
>
Is the latter one really unsafe? I'm not quite sure how to code
something that the compiler accepts and crashes at runtime because
mydirs :: Map AppDir FilePath and I would believe that the compiler
would detect if the values after the ! is not from AppDir.
--
Manfred
More information about the Beginners
mailing list