[Haskell-beginners] Parse error: naked expression at top level

Tom Murphy amindfv at gmail.com
Wed Jul 20 20:17:01 CEST 2011


On 7/20/11, Roelof Wobben <rwobben at hotmail.com> wrote:
>
> Hello,
>
> I made this little script :
>
> replicate :: Int -> a -> [a]
> replicate a xs = [xs | x' <= a <--xs]
>

I don't think this list comprehension works:
  - You've got the "<--" arrow instead of "<-". Maybe you're
copy-pasting from Leksah, so it's causing the mistake in the
copy-paste?
  - You haven't defined x' anywhere
  - I don't think you can combine a predicate (x' <= a) with a
generator (a <- xs)
  - xs is your "feed" for the generator "a <- xs". What if, like in
your example, xs is not a list? Also, for clarity, I would only name
something "xs" if it is definitely a list.

I don't want to spoon-feed you a solution, but I'd recommend:
  - Your "feed" in the generator (in your example the rightmost xs)
being an infinite list, so that a is never a larger number than the
number of elements in your "feed"
  - For clarity, don't define x', if you aren't going to use it. It's
valid Haskell to write, for example:
       f :: [a] -> [Bool]
       f x = [True | _ <- x]

Tom



More information about the Beginners mailing list