
Why this works :P bmaxa@Branimirs-Air haskell % ghc -O2 semi.hs Loaded package environment from /Users/bmaxa/.ghc/aarch64-darwin-8.10.7/environments/default [1 of 1] Compiling Main ( semi.hs, semi.o ) Linking semi ... bmaxa@Branimirs-Air haskell % ./semi [1,2,3,3,2,1] bmaxa@Branimirs-Air haskell % cat semi.hs main = do let lst = lrl [1,2,3] print lst ; ; ; ; ; ; ; ;;;;lrl :: [a]->[a]; ;; ; ; ; ; lrl xs = xs ++ reverse xs
On 28.09.2021., at 12:00, Anthony Clayden
wrote: From the department of improbable syntax/I don't get how this works, but it does:
f :: [a] -> [a] ;; f xs = xs ++ reverse xs
Nicely (to my eye) groups/indents the binding under the signature. Especially handy with ScopedTypeVariables, to show how the scoped vars 'belong'
f :: forall a. [a] -> [a] ;; f xs = xs ++ ys where ys :: [a] ys = reverse xs
The doubled `;;` stands out like a ditto. It could be a single semicolon (which means there's an empty decl/binding between the semis -- I don't see that's allowed by the syntax).
Unfortunately, for multi-line bindings you need to repeat the `;;`
f :: [a] -> [a] ;; f [] = [] ;; f xs = xs ++ reverse xs
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.