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 ./. [
|
src = depot.users.Profpatsch.exactSource ./. [
|
||||||
./my-prelude.cabal
|
./my-prelude.cabal
|
||||||
./src/Aeson.hs
|
./src/Aeson.hs
|
||||||
|
./src/Arg.hs
|
||||||
./src/AtLeast.hs
|
./src/AtLeast.hs
|
||||||
./src/MyPrelude.hs
|
./src/MyPrelude.hs
|
||||||
./src/Test.hs
|
./src/Test.hs
|
||||||
|
|
|
@ -59,6 +59,7 @@ library
|
||||||
exposed-modules:
|
exposed-modules:
|
||||||
MyPrelude
|
MyPrelude
|
||||||
Aeson
|
Aeson
|
||||||
|
Arg
|
||||||
AtLeast
|
AtLeast
|
||||||
Test
|
Test
|
||||||
Postgres.Decoder
|
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