module Listlen (main) where

import FFI

-- Test provided by ticket
go :: [Double] -> [Double]
go  [] = []
go  (c:cs) = let placed = go cs in (place c placed : placed)

place :: Double -> [Double] -> Double
place c [] = c
place c [_] = c

-- | Main entry point.
main :: Fay ()
main = do
  forM_ (go [1,2]) $ \c -> c `seq` return ()
  printS "OK"

  case (1 : (2 : (3 : (4 : (5 : []))))) of
    (_1:_2:_3:_4:_5:[]) -> printS "OK"

  case (1 : (2 : (3 : (4 : (5 : []))))) of
    (_1:_2:_3:_4:_5:_6:[]) -> printS "FAIL"
    _ -> printS "OK"

  case (1 : (2 : (3 : (4 : (5 : []))))) of
    (1:2:3:4:5:[]) -> printS "OK"

  case (1 : (2 : (3 : (4 : (5 : []))))) of
    (1:2:3:_) -> printS "OK"

  case (1 : (2 : (3 : (4 : (5 : []))))) of
    (1:2:3:7:8:[]) -> printS "FAIL"
    (1:2:3:4:5:[]) -> printS "OK"

  case [] of
    (1:[]) -> printS "FAIL"
    [1,2] -> printS "FAIL"
    [] -> printS "OK"

  case ([] : []) of
    ([1]:[]) -> printS "FAIL"
    [[1,2]] -> printS "FAIL"
    [[]] -> printS "OK"

printS :: String -> Fay ()
printS = ffi "console.log(%1)"