1
1
mirror of https://github.com/github/semantic.git synced 2024-12-18 12:21:57 +03:00

Merge pull request #2508 from github/more-flags

Use a Data.Flag rather than a Bool for force-indexing checks.
This commit is contained in:
Patrick Thomson 2019-03-28 09:03:55 -04:00 committed by GitHub
commit 74bb7102fb

View File

@ -1,4 +1,4 @@
{-# LANGUAGE RankNTypes, KindSignatures #-}
{-# LANGUAGE DerivingStrategies, GeneralizedNewtypeDeriving, RankNTypes, KindSignatures #-}
-- | -- This technique is due to Oleg Grenrus: <http://oleg.fi/gists/posts/2019-03-21-flag.html>
-- The implementation is clean-room due to unclear licensing of the original post.
@ -10,7 +10,7 @@ module Data.Flag
, choose
) where
import Data.Coerce
import Prologue
-- | To declare a new flag, declare a singly-inhabited type:
-- @data MyFlag = MyFlag@
@ -19,6 +19,8 @@ import Data.Coerce
-- working with multiple flag values in flight, as the 'toBool' deconstructor provides a witness
-- that you really want the given semantic flag value from the flag datum.
newtype Flag (t :: *) = Flag Bool
deriving stock (Eq, Show)
deriving newtype NFData
-- | The constructor for a 'Flag'. You specify @t@ with a visible type application.
flag :: t -> Bool -> Flag t