Hello all!

Let

> data Book = Book {
>      authors   :: [String],
>      title     :: String,
>      editor    :: Maybe String,
>      edition   :: Maybe String,
>      volume    :: Maybe (Int, Int), -- e.g. volume 1 of 3
>      publisher :: String,
>      year      :: Int,
>      pages     :: Int
> } 

and

> convertBook :: Map String String -- a map from field names to values (string 
> representation)
>             -> Maybe Book

convertBook takes info about book from some external source (e.g. a BibTeX 
database) and returns
Just book value or Nothing (if convertion failed). Fields of the Book datatype 
which are not (Maybe a)
are required to be present. 

convertBook looks like

> convertBook = (rq "title" (\b v -> b { title = v })         <.>
>                rq "publisher" (\b v -> b { publisher = v }) <.>
>                ... ) (Just $ Book [] "" Nothing Nothing Nothing "" 0 0)

I don't like the `(Just $ Book [] "" Nothing Nothing Nothing "" 0 0)' part, I 
would prefer
instead someting like `empty :: Book'. So I define 

> class Empty e where
>       empty :: e

But still I have to emplement instances by hand. There are a number of 
approaches to automatically
derive instances (TH, generic classes in GHC, drift). What would you recommend 
using in this case?
Or may be it would be better to drop out Empty and use something else?

TIA

-- 
WBR,
Max Vasin.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to