perm [] = [[]]
perm xs = concatMap f xs
where f x = map (x :) (perm (delete x xs))
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 1})
(Ident "perm")
[PList []]
Nothing
(UnGuardedRhs (List [List []]))
(BDecls []),
Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 1})
(Ident "perm")
[PVar (Ident "xs")]
Nothing
(UnGuardedRhs (App (App (Var (UnQual (Ident "concatMap")))
(Var (UnQual (Ident "f"))))
(Var (UnQual (Ident "xs")))))
(BDecls [FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 7, srcColumn = 10})
(Ident "f")
[PVar (Ident "x")]
Nothing
(UnGuardedRhs (App (App (Var (UnQual (Ident "map")))
(LeftSection (Var (UnQual (Ident "x")))
(QConOp (Special Cons))))
(Paren (App (Var (UnQual (Ident "perm")))
(Paren (App (App (Var (UnQual (Ident "delete")))
(Var (UnQual (Ident "x"))))
(Var (UnQual (Ident "xs")))))))))
(BDecls [])]])]
safe p n = all not [ check (i,j) (m,n) | (i,j) <- zip [1..] p ]
where m = 1 + length p
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 1})
(Ident "safe")
[PVar (Ident "p"),PVar (Ident "n")]
Nothing
(UnGuardedRhs (App (App (Var (UnQual (Ident "all")))
(Var (UnQual (Ident "not"))))
(ListComp (App (App (Var (UnQual (Ident "check")))
(Tuple [Var (UnQual (Ident "i")),Var (UnQual (Ident "j"))]))
(Tuple [Var (UnQual (Ident "m")),Var (UnQual (Ident "n"))]))
[QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 51})
(PTuple [PVar (Ident "i"),PVar (Ident "j")])
(App (App (Var (UnQual (Ident "zip")))
(EnumFrom (Lit (Int 1))))
(Var (UnQual (Ident "p")))))])))
(BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 27})
(PVar (Ident "m"))
Nothing
(UnGuardedRhs (InfixApp (Lit (Int 1))
(QVarOp (UnQual (Symbol "+")))
(App (Var (UnQual (Ident "length")))
(Var (UnQual (Ident "p"))))))
(BDecls [])])]
f1 a1 = a1
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 24, srcColumn = 1})
(Ident "f1")
[PVar (Ident "a1")]
Nothing
(UnGuardedRhs (Var (UnQual (Ident "a1"))))
(BDecls [])]
f2 = 1 + 2
PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 25, srcColumn = 1})
(PVar (Ident "f2"))
Nothing
(UnGuardedRhs (InfixApp (Lit (Int 1))
(QVarOp (UnQual (Symbol "+")))
(Lit (Int 2))))
(BDecls [])
firstNLines n cs = unlines $ take n $ lines cs
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 26, srcColumn = 1})
(Ident "firstNLines")
[PVar (Ident "n"),PVar (Ident "cs")]
Nothing
(UnGuardedRhs (InfixApp (Var (UnQual (Ident "unlines")))
(QVarOp (UnQual (Symbol "$")))
(InfixApp (App (Var (UnQual (Ident "take")))
(Var (UnQual (Ident "n"))))
(QVarOp (UnQual (Symbol "$")))
(App (Var (UnQual (Ident "lines")))
(Var (UnQual (Ident "cs")))))))
(BDecls [])]
firstNLinesParen n cs = unlines (take n (lines cs))
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 26, srcColumn = 1})
(Ident "firstNLinesParen")
[PVar (Ident "n"),PVar (Ident "cs")]
Nothing
(UnGuardedRhs (App (Var (UnQual (Ident "unlines")))
(Paren (App (App (Var (UnQual (Ident "take")))
(Var (UnQual (Ident "n"))))
(Paren (App (Var (UnQual (Ident "lines")))
(Var (UnQual (Ident "cs")))))))))
(BDecls [])]
ramanujan :: [((Int, Int), (Int, Int))]
ramanujan = [(x, y) | (x, y) <- zip s (tail s)]
where s = fsort sumcubes 1
PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 29, srcColumn = 1})
(PVar (Ident "ramanujan"))
Nothing
(UnGuardedRhs (ListComp (Tuple [Var (UnQual (Ident "x")),Var (UnQual (Ident "y"))])
[QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 29, srcColumn = 21})
(PTuple [PVar (Ident "x"),PVar (Ident "y")])
(App (App (Var (UnQual (Ident "zip")))
(Var (UnQual (Ident "s"))))
(Paren (App (Var (UnQual (Ident "tail")))
(Var (UnQual (Ident "s")))))))]))
(BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 30, srcColumn = 9})
(PVar (Ident "s"))
Nothing
(UnGuardedRhs (App (App (Var (UnQual (Ident "fsort")))
(Var (UnQual (Ident "sumcubes"))))
(Lit (Int 1))))
(BDecls [])])
isSophie :: Integer -> Bool
isSophie p = let q = 2 * p + 1 in ordElem q primes
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 33, srcColumn = 1})
(Ident "isSophie")
[PVar (Ident "p")]
Nothing
(UnGuardedRhs (Let (BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 33, srcColumn = 18})
(PVar (Ident "q"))
Nothing
(UnGuardedRhs (InfixApp (InfixApp (Lit (Int 2))
(QVarOp (UnQual (Symbol "*")))
(Var (UnQual (Ident "p"))))
(QVarOp (UnQual (Symbol "+")))
(Lit (Int 1))))
(BDecls [])])
(App (App (Var (UnQual (Ident "ordElem")))
(Var (UnQual (Ident "q"))))
(Var (UnQual (Ident "primes"))))))
(BDecls [])]
isHappyNumber n
| n <= 0 =
error ("isHappyNumber: not a positive integer " ++ show n)
| otherwise =
let m = sum $ map (\ x -> x * x) $ splitInt n in
if m == 1 then True else if m == 4 then False else isHappyNumber m
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 36, srcColumn = 1})
(Ident "isHappyNumber")
[PVar (Ident "n")]
Nothing
(GuardedRhss [GuardedRhs (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 37, srcColumn = 3})
[Qualifier (InfixApp (Var (UnQual (Ident "n")))
(QVarOp (UnQual (Symbol "<=")))
(Lit (Int 0)))]
(App (Var (UnQual (Ident "error")))
(Paren (InfixApp (Lit (String "isHappyNumber: not a positive integer "))
(QVarOp (UnQual (Symbol "++")))
(App (Var (UnQual (Ident "show")))
(Var (UnQual (Ident "n"))))))),
GuardedRhs (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 38, srcColumn = 3})
[Qualifier (Var (UnQual (Ident "otherwise")))]
(Let (BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 38, srcColumn = 23})
(PVar (Ident "m"))
Nothing
(UnGuardedRhs (InfixApp (Var (UnQual (Ident "sum")))
(QVarOp (UnQual (Symbol "$")))
(InfixApp (App (Var (UnQual (Ident "map")))
(Paren (Lambda (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 38, srcColumn = 38})
[PVar (Ident "x")]
(InfixApp (Var (UnQual (Ident "x")))
(QVarOp (UnQual (Symbol "*")))
(Var (UnQual (Ident "x")))))))
(QVarOp (UnQual (Symbol "$")))
(App (Var (UnQual (Ident "splitInt")))
(Var (UnQual (Ident "n")))))))
(BDecls [])])
(If (InfixApp (Var (UnQual (Ident "m")))
(QVarOp (UnQual (Symbol "==")))
(Lit (Int 1)))
(Con (UnQual (Ident "True")))
(If (InfixApp (Var (UnQual (Ident "m")))
(QVarOp (UnQual (Symbol "==")))
(Lit (Int 4)))
(Con (UnQual (Ident "False")))
(App (Var (UnQual (Ident "isHappyNumber")))
(Var (UnQual (Ident "m")))))))])
(BDecls [])]
queens number_of_queens = qu number_of_queens where
qu 0 = [[]]
qu (m+1) = [p++[n] | p<-qu m, n<-[1..number_of_queens], safe p n]
FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 1})
(Ident "queens")
[PVar (Ident "number_of_queens")]
Nothing
(UnGuardedRhs (App (Var (UnQual (Ident "qu")))
(Var (UnQual (Ident "number_of_queens")))))
(BDecls [FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 5})
(Ident "qu")
[PLit (Int 0)]
Nothing
(UnGuardedRhs (List [List []]))
(BDecls []),
Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 5})
(Ident "qu")
[PParen (PNPlusK (Ident "m") 1)]
Nothing
(UnGuardedRhs (ListComp (InfixApp (Var (UnQual (Ident "p")))
(QVarOp (UnQual (Symbol "++")))
(List [Var (UnQual (Ident "n"))]))
[QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 29})
(PVar (Ident "p"))
(App (Var (UnQual (Ident "qu")))
(Var (UnQual (Ident "m"))))),
QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 38})
(PVar (Ident "n"))
(EnumFromTo (Lit (Int 1))
(Var (UnQual (Ident "number_of_queens"))))),
QualStmt (Qualifier (App (App (Var (UnQual (Ident "safe")))
(Var (UnQual (Ident "p"))))
(Var (UnQual (Ident "n")))))]))
(BDecls [])]])]