-- | Partial functions that make common types in Lincoln. Some data -- types in Lincoln are deeply nested, with TextNonEmpty nested inside -- of a newtype, nested inside of a NonEmptyList, nested inside -- of... :) All the nesting ensures to the maximum extent possible -- that the type system reflects the restrictions that exist on -- Penny's data. For example, it would make no sense to have an empty -- account (that is, an account with no sub-accounts) or a sub-account -- whose name is an empty Text. -- -- The disadvantage of the nesting is that building these data types -- can be tedious if, for example, you want to build some data within -- a short custom Haskell program. Thus, this module. module Penny.Lincoln.Builders ( account ) where import qualified Penny.Lincoln.Bits as B import qualified Data.Text as X -- | Create an Account. You supply a single Text, with colons to -- separate the different sub-accounts. account :: X.Text -> B.Account account s = if X.null s then B.Account [] else B.Account . map B.SubAccount . X.splitOn (X.singleton ':') $ s