-- 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.1 -- | 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)