-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A solution to boolean blindness. -- -- Please see README.md. @package choice @version 0.2.0 -- | Represent do/don't, is/isn't, with/without flags with Choice. -- -- Boolean blindness refers to the problem that boolean literals -- on their own aren't very informative. In any given context, what does -- True mean? What does False mean? Instead of passing -- arguments of type Bool to functions, consider using -- Choice. -- -- Choice is the type of labeled booleans. Use it as follows: -- --
--   {-# LANGUAGE OverloadedLabels #-}
--   
--   import Data.Choice (Choice, Do, Don't)
--   
--   -- Blocking read: block until N bytes available.
--   -- Non-blocking: return as many bytes as are available.
--   readBytes :: Handle -> Choice "block" -> Int -> IO ByteString
--   readBytes = ...
--   
--   action1 = print =<< readBytes h (Don't #block) 1024
--   
-- -- For GHC < 8.0, where overloaded labels are not available, -- substitute (Label :: Label "block") for #block. -- -- A comment on labels: why use labels? We could as well ask the -- user to define ad hoc constructors. But unlike constructors, labels -- are guaranteed to be singletons. That's exactly what we want: a label -- doesn't carry any runtime information, it's just a type annotation. -- Better yet, with labels, there is no need to ensure that constructor -- names are unique, nor to pollute the precious constructor namespace in -- a large module with many flags. module Data.Choice -- | A labeled boolean choice. data Choice (a :: Symbol) fromBool :: Bool -> Choice a toBool :: Choice a -> Bool -- | Alias for True, e.g. Do #block. -- | Alias for False, e.g. Don't #block. -- | Alias for True, e.g. Is #ordered. -- | Alias for False, e.g. Isn't #ordered. -- | Alias for True, e.g. With #ownDirectory. -- | Alias for False, e.g. Without #ownDirectory. -- | A synonym for Proxy. data Label (a :: Symbol) Label :: Label instance GHC.Generics.Generic (Data.Choice.Choice a) instance GHC.Classes.Ord (Data.Choice.Choice a) instance GHC.Classes.Eq (Data.Choice.Choice a) instance GHC.Show.Show (Data.Choice.Label a) instance GHC.Classes.Ord (Data.Choice.Label a) instance GHC.Classes.Eq (Data.Choice.Label a) instance x ~ x' => GHC.OverloadedLabels.IsLabel x (Data.Choice.Label x') instance GHC.Show.Show (Data.Choice.Choice a) instance GHC.Enum.Enum (Data.Choice.Choice a) instance GHC.Enum.Bounded (Data.Choice.Choice a)