Does this code compile? The line "type Sales = Sales Record" for instance is wrong - it should be "data Sales = Sales Record". Additionally "recordSale" returns an Int, not [Sales].
-deech On Mon, Jul 5, 2010 at 10:50 AM, Mrwibbly <jackwater...@googlemail.com> wrote: > > This really helped, but now I am trying to add a new track to the database > using a menu but it won't compile. I have tried a lot of different things > but to no avail. > > When I get rid of the menu I am able to run, for example, newRecord "This > Charming Man" "The Smiths" 1 [] > > This adds the data to an empty database but I can't seem to call newRecord > again and add another record to the existing database. > > Thanks for your help previously, > > Jack > > type Title = String > type Artist = String > type Sold = Int > type Sales = Sales Record > type Record = (Title, Artist, Sold) > > > testDatabase :: [Sales] > testDatabase = [(Sales "Jack" "Waters" 2)] > > --recordSale :: Sales -> String -> String -> Sales > --recordSale title artist = (title, artist) > > newRecord :: Record -> [Sales] -> [Sales] > newRecord title artist sold dbase = (title, artist, sold):dbase > > recordSale :: Record -> [Sales] > recordSale record sales = sold + 1 > > main :: [Sales] -> IO() > main dbase = do > putStrLn "1 = Add a new record: " > input <- getLine > let x = read input :: Int > if x == 1 > then do putStrLn "Please enter a title: " > title <- getLine > putStrLn "Please enter an artist name: " > artist <- getLine > putStrLn "Please enter the number sales: " > sales <- getInt > newRecord (Sales title artist sales []) dbase > > > Holger Siegel wrote: >> >> >> Am 01.07.2010 um 21:56 schrieb Mrwibbly: >> >>> >>> I'm having real trouble starting this project. Basically I have to create >>> a >>> record store that store information about artists and albums and also the >>> number of sales that they have had. It also needs to generate a list of >>> the >>> top 5 sellers. >>> >>> So far I have: recordSale :: Sales -> String -> String -> Sales >>> >>> where recordSale sales anArtist aTrack returns a modified version of the >>> sales. >>> >>> Any help getting started on this would be gratefully received. I don't >>> want >>> answers, I just want help getting started. >> >> First, I would state explicitly what a record is: It is a tuple of an >> artist's name and a record's name >> >> type Record = (String, String) >> >> Now function recordSale has type >> >> recordSale :: Sales -> Record -> Sales >> >> This is the an "uncurried" equivalent of your definition. You can read it >> as "from a sales object you get to another sales object via a (sold) >> record". That already seems to be a good abstraction, but we can do >> better: If you flip the arguments, you get >> >> recordSale :: Record -> Sales -> Sales >> >> Now you can create a sale (recordSale ("Zappa", "Apostrophe")). This sale >> is a function of type (Sales -> Sales) that modifies your sales. We state >> this by defining >> >> type Sale = Sales -> Sales >> >> recordSale :: Record -> Sale >> >> Sales can be concatenated with the dot operator (.) and there is even a >> "neutral sale", the function 'id'. Thus, you know immediately that for any >> sales x,y,z there is (x . (y . z) == (x . y) . z) and (x . id == x). In >> other words, it forms a monoid - just like the number of sales together >> with (+) and 0! >> >> If you're only interested in the number of sales, you can simply define >> >> type Sales = Integer >> >> recordSale record sales = sales + 1 >> >> But you don't want to keep track of the whole number of sales - you want a >> number for every record you have sold. That means, you need a data >> structure that maps records to their number of sales: >> >> import Data.Map >> >> type Sales = Map Record Integer >> >> It's a bit tricky to find an implementation for recordSale. Think of how >> you can combine two arbitrary Sales objects before you try to implement >> it. >> >> Regards, Holger >> >> _______________________________________________ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> >> > > -- > View this message in context: > http://old.nabble.com/Getting-started-tp29046956p29073993.html > Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe