@@ -4,7 +4,7 @@
44{-# OPTIONS_GHC -Wno-orphans #-}
55
66module Data.Id
7− ( Id, mkId, unId, unsafeIdTagConvert, coerceId, _Id, nilId
7+ ( Id, mkId, unId, randomId, unsafeIdTagConvert, coerceId, _Id, nilId
88 , IntId, mkIntId, unIntId, unsafeIntIdTagConvert, coerceIntId, _IntId
99 , Name, mkName, unName, unsafeNameTagConvert, coerceName, _Name
1010 )
@@ -23,6 +23,7 @@ import Data.String
2323import Data.Text as T
2424import Data.UUID (UUID)
2525import qualified Data.UUID as UUID
26+import qualified Data.UUID.V4 as UUID.V4
2627#ifndef ghcjs_HOST_OS
2728import Database.PostgreSQL.Simple.FromField as PG (FromField)
2829import Database.PostgreSQL.Simple.ToField as PG (ToField)
@@ -53,6 +54,10 @@ mkId :: forall s. UUID -> Id s
5354mkId = coerce
5455{-# INLINE mkId #-}
5556
57+randomId :: forall s. IO (Id s)
58+randomId = coerce <$> UUID.V4.nextRandom
59+{-# INLINE randomId #-}
60+
5661instance KnownSymbol s => Show (Id s) where
5762 show (Id v) = "Id-" <> symbolVal (Proxy @s) <> "-" <> show v
5863