Stop using to/of conventions backwards

This commit is contained in:
James Eversole
2024-12-28 07:24:19 -06:00
parent 2e539eb545
commit e376d13a93
5 changed files with 33 additions and 33 deletions

View File

@ -51,41 +51,41 @@ _not :: T
_not = Fork (Fork _true (Fork Leaf _false)) Leaf
-- Marshalling
toString :: String -> T
toString str = toList (map toNumber (map fromEnum str))
ofString :: String -> T
ofString str = ofList (map ofNumber (map fromEnum str))
toNumber :: Int -> T
toNumber 0 = Leaf
toNumber n =
ofNumber :: Int -> T
ofNumber 0 = Leaf
ofNumber n =
Fork
(if odd n then Stem Leaf else Leaf)
(toNumber (n `div` 2))
(ofNumber (n `div` 2))
toList :: [T] -> T
toList [] = Leaf
toList (x:xs) = Fork x (toList xs)
ofList :: [T] -> T
ofList [] = Leaf
ofList (x:xs) = Fork x (ofList xs)
ofNumber :: T -> Either String Int
ofNumber Leaf = Right 0
ofNumber (Fork Leaf rest) = case ofNumber rest of
toNumber :: T -> Either String Int
toNumber Leaf = Right 0
toNumber (Fork Leaf rest) = case toNumber rest of
Right n -> Right (2 * n)
Left err -> Left err
ofNumber (Fork (Stem Leaf) rest) = case ofNumber rest of
toNumber (Fork (Stem Leaf) rest) = case toNumber rest of
Right n -> Right (1 + 2 * n)
Left err -> Left err
ofNumber _ = Left "Invalid Tree Calculus number"
toNumber _ = Left "Invalid Tree Calculus number"
ofString :: T -> Either String String
ofString tc = case ofList tc of
Right list -> traverse (fmap toEnum . ofNumber) list
toString :: T -> Either String String
toString tc = case toList tc of
Right list -> traverse (fmap toEnum . toNumber) list
Left err -> Left "Invalid Tree Calculus string"
ofList :: T -> Either String [T]
ofList Leaf = Right []
ofList (Fork x rest) = case ofList rest of
toList :: T -> Either String [T]
toList Leaf = Right []
toList (Fork x rest) = case toList rest of
Right xs -> Right (x : xs)
Left err -> Left err
ofList _ = Left "Invalid Tree Calculus list"
toList _ = Left "Invalid Tree Calculus list"
-- Utility
toAscii :: T -> String