fmToPropositionalLogic :: FeatureModel a -> [FeatureExpression]
fmToPropositionalLogic fm = rootProposition ++ ftPropositions ++ csPropositions
    where
        (T.Node f fs) = fmTree fm
        ftPropositions  = foldFTree (++) (\(T.Node _ []) -> []) (featureToPropositionalLogic) [] (T.Node f fs)
        csPropositions = fmConstraints fm
        rootProposition = [ref f]
fmToPropositionalLogic :: FeatureModel a -> [FeatureExpression]
fmToPropositionalLogic fm = rootProposition ++ ftPropositions ++ csPropositions
    where
        (T.Node f fs) = fmTree fm
        ftPropositions  = foldFTree (++) (\(T.Node _ []) -> []) (featureToPropositionalLogic) [] (T.Node f fs)
        csPropositions = fmConstraints fm
        rootProposition = [ref f]
fmToPropositionalLogic fm = rootProposition ++ ftPropositions ++ csPropositions
    where
        (T.Node f fs) = fmTree fm
        ftPropositions  = foldFTree (++) (\(T.Node _ []) -> []) (featureToPropositionalLogic) [] (T.Node f fs)
        csPropositions = fmConstraints fm
        rootProposition = [ref f]