haskell-src-extsの関数の解析結果

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 [])]])]