[Haskell-cafe] List comprehension

porges at porg.es porges at porg.es
Tue May 5 21:58:45 EDT 2009



2009/5/6 Bulat Ziganshin <bulat.ziganshin at gmail.com>:
> Hello applebiz89,
>
> Tuesday, May 5, 2009, 7:20:35 PM, you wrote:
>
>> filmsInGivenYear :: Int -> [Film] -> [String]
>> filmsInGivenYear filmYear ?= [ title | year <- (Film title director year
>> fans) , year == filmYear] (this code wont compile - error given '?Syntax
>> error in expression (unexpected `;', possibly due to bad layout)')
>
> you forget films list variable:
>
> filmsInGivenYear filmYear films =
>  [ title | (Film title director year fans) <- films, year == filmYear]

And this is nicer if you define Film with records:

-- just guessing as to types
data Film = Film { title :: String, director :: String, year :: Int, fans :: [Fan] }

filmsInGivenYear filmYear films = [title | film <- films, year film == filmYear]

-- and then it's probably easier written as:
filmsInGivenYear filmYear films = filter (\film -> year film == filmYear) films

-- or slightly simpler:
filmsInGivenYear filmYear = filter (\film -> year film == filmYear)

-- or with Data.Function.Predicate (shameless plug) <http://hackage.haskell.org/packages/archive/predicates/0.1/doc/html/Data-Function-Predicate.html>:
filmsInGivenYear filmYear = filter (year `equals` filmYear)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 270 bytes
Desc: OpenPGP digital signature
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090506/de2ff7ad/signature.bin


More information about the Haskell-Cafe mailing list