module Pointfree where
import Plugin.Pl.Common (mapTopLevel, mapTopLevel')
import Plugin.Pl.Optimize (optimize)
import Plugin.Pl.Parser (parsePF)
import Plugin.Pl.PrettyPrinter (prettyTopLevel)
import Plugin.Pl.Transform (transform)
import Data.Maybe (listToMaybe)
pointfree :: String -> [String]
pointfree :: String -> [String]
pointfree
= forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either
(forall a b. a -> b -> a
const [])
(forall a b. (a -> b) -> [a] -> [b]
map TopLevel -> String
prettyTopLevel forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *).
Functor f =>
(Expr -> f Expr) -> TopLevel -> f TopLevel
mapTopLevel' Expr -> [Expr]
optimize forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Expr -> Expr) -> TopLevel -> TopLevel
mapTopLevel Expr -> Expr
transform)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either String TopLevel
parsePF
pointfree' :: String -> Maybe String
pointfree' :: String -> Maybe String
pointfree' = forall a. [a] -> Maybe a
listToMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> [a]
reverse forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
pointfree