feat(users/Profpatsch/MyPrelude): add Arg
Change-Id: I218562c924489ff9cba783dc88ecb8e777c8aac3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11656 Reviewed-by: Profpatsch <mail@profpatsch.de> Autosubmit: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
53163de836
commit
5ea5dff597
3 changed files with 36 additions and 0 deletions
|
@ -7,6 +7,7 @@ pkgs.haskellPackages.mkDerivation {
|
|||
src = depot.users.Profpatsch.exactSource ./. [
|
||||
./my-prelude.cabal
|
||||
./src/Aeson.hs
|
||||
./src/Arg.hs
|
||||
./src/AtLeast.hs
|
||||
./src/MyPrelude.hs
|
||||
./src/Test.hs
|
||||
|
|
|
@ -59,6 +59,7 @@ library
|
|||
exposed-modules:
|
||||
MyPrelude
|
||||
Aeson
|
||||
Arg
|
||||
AtLeast
|
||||
Test
|
||||
Postgres.Decoder
|
||||
|
|
34
users/Profpatsch/my-prelude/src/Arg.hs
Normal file
34
users/Profpatsch/my-prelude/src/Arg.hs
Normal file
|
@ -0,0 +1,34 @@
|
|||
module Arg where
|
||||
|
||||
import Data.String (IsString)
|
||||
import GHC.Exts (IsList)
|
||||
import GHC.TypeLits (Symbol)
|
||||
|
||||
-- | Wrap a function argument into this helper to give it a better description for the caller without disturbing the callsite too much.
|
||||
--
|
||||
-- This has instances for IsString and Num, meaning if the caller is usually a string or number literal, it should Just Work.
|
||||
--
|
||||
-- e.g.
|
||||
--
|
||||
-- @
|
||||
-- myFoo :: Arg "used as the name in error message" Text -> IO ()
|
||||
-- myFoo (Arg name) = …
|
||||
-- @
|
||||
--
|
||||
-- Will display the description in the inferred type of the callsite.
|
||||
--
|
||||
-- Due to IsString you can call @myFoo@ like
|
||||
--
|
||||
-- @myFoo "name in error"@
|
||||
--
|
||||
-- This is mostly intended for literals, if you want to wrap arbitrary data, use @Label@.
|
||||
newtype Arg (description :: Symbol) a = Arg {unArg :: a}
|
||||
deriving newtype
|
||||
( Show,
|
||||
Eq,
|
||||
IsString,
|
||||
IsList,
|
||||
Num,
|
||||
Monoid,
|
||||
Semigroup
|
||||
)
|
Loading…
Reference in a new issue