Stop using to/of conventions backwards
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user