module Strongweak.Strengthen.Unsafe where
import Strongweak.Weaken
import Data.Word
import Data.Int
import Refined ( Refined )
import Refined.Unsafe ( reallyUnsafeRefine )
import Data.Vector.Generic.Sized qualified as VGS
import Data.Vector.Generic qualified as VG
import Data.Vector.Generic.Sized.Internal qualified
import Data.Functor.Identity
import Data.Functor.Const
import Data.List.NonEmpty qualified as NonEmpty
import Data.List.NonEmpty ( NonEmpty )
class Weaken a => UnsafeStrengthen a where
unsafeStrengthen :: Weak a -> a
instance UnsafeStrengthen (Refined p a) where
unsafeStrengthen :: Weak (Refined p a) -> Refined p a
unsafeStrengthen = forall {k} x (p :: k). x -> Refined p x
reallyUnsafeRefine
instance UnsafeStrengthen (NonEmpty a) where
unsafeStrengthen :: Weak (NonEmpty a) -> NonEmpty a
unsafeStrengthen = forall a. [a] -> NonEmpty a
NonEmpty.fromList
instance VG.Vector v a => UnsafeStrengthen (VGS.Vector v n a) where
unsafeStrengthen :: Weak (Vector v n a) -> Vector v n a
unsafeStrengthen =
forall (v :: Type -> Type) (n :: Nat) a. v a -> Vector v n a
Data.Vector.Generic.Sized.Internal.Vector forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: Type -> Type) a. Vector v a => [a] -> v a
VG.fromList
instance UnsafeStrengthen (Identity a) where
unsafeStrengthen :: Weak (Identity a) -> Identity a
unsafeStrengthen = forall a. a -> Identity a
Identity
instance UnsafeStrengthen (Const a b) where
unsafeStrengthen :: Weak (Const a b) -> Const a b
unsafeStrengthen = forall {k} a (b :: k). a -> Const a b
Const
instance UnsafeStrengthen Word8 where unsafeStrengthen :: Weak Word8 -> Word8
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Word16 where unsafeStrengthen :: Weak Word16 -> Word16
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Word32 where unsafeStrengthen :: Weak Word32 -> Word32
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Word64 where unsafeStrengthen :: Weak Word64 -> Word64
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Int8 where unsafeStrengthen :: Weak Int8 -> Int8
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Int16 where unsafeStrengthen :: Weak Int16 -> Int16
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Int32 where unsafeStrengthen :: Weak Int32 -> Int32
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen Int64 where unsafeStrengthen :: Weak Int64 -> Int64
unsafeStrengthen = forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance UnsafeStrengthen a => UnsafeStrengthen [a] where
unsafeStrengthen :: Weak [a] -> [a]
unsafeStrengthen = forall a b. (a -> b) -> [a] -> [b]
map forall a. UnsafeStrengthen a => Weak a -> a
unsafeStrengthen
instance (UnsafeStrengthen a, UnsafeStrengthen b)
=> UnsafeStrengthen (a, b) where
unsafeStrengthen :: Weak (a, b) -> (a, b)
unsafeStrengthen (Weak a
a, Weak b
b) = (forall a. UnsafeStrengthen a => Weak a -> a
unsafeStrengthen Weak a
a, forall a. UnsafeStrengthen a => Weak a -> a
unsafeStrengthen Weak b
b)
instance (UnsafeStrengthen a, UnsafeStrengthen b)
=> UnsafeStrengthen (Either a b) where
unsafeStrengthen :: Weak (Either a b) -> Either a b
unsafeStrengthen = \case Left Weak a
a -> forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ forall a. UnsafeStrengthen a => Weak a -> a
unsafeStrengthen Weak a
a
Right Weak b
b -> forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall a. UnsafeStrengthen a => Weak a -> a
unsafeStrengthen Weak b
b