{-# LANGUAGE RankNTypes #-}
module Fresnel.Set
( setmapped
, setOf
) where

import Data.Set as Set
import Fresnel.Fold
import Fresnel.Setter

setmapped :: Ord b => Setter (Set a) (Set b) a b
setmapped :: forall b a. Ord b => Setter (Set a) (Set b) a b
setmapped = ((a -> b) -> Set a -> Set b) -> Setter (Set a) (Set b) a b
forall a b s t. ((a -> b) -> s -> t) -> Setter s t a b
sets (a -> b) -> Set a -> Set b
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map

setOf :: Ord a => Fold s a -> (s -> Set.Set a)
setOf :: forall a s. Ord a => Fold s a -> s -> Set a
setOf Fold s a
o = [a] -> Set a
forall a. Ord a => [a] -> Set a
Set.fromList ([a] -> Set a) -> (s -> [a]) -> s -> Set a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Fold s a -> s -> [a]
forall s a. Fold s a -> s -> [a]
toListOf Fold s a
o