swizzle: Swizzle functions

[ bsd3, data, library ] [ Propose Tags ] [ Report a vulnerability ]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0
Change log CHANGELOG.md
Dependencies base (>=4.7 && <5), template-haskell (<3) [details]
License BSD-3-Clause
Copyright (c) 2025 Yoshikuni Jujo
Author Yoshikuni Jujo
Maintainer yoshikuni.jujo@gmail.com
Category Data
Home page https://github.com/YoshikuniJujo/swizzle#readme
Bug tracker https://github.com/YoshikuniJujo/swizzle/issues
Source repo head: git clone https://github.com/YoshikuniJujo/swizzle
Uploaded by YoshikuniJujo at 2025-01-10T04:07:23Z
Distributions
Downloads 0 total (0 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2025-01-10 [all 1 reports]

Readme for swizzle-0.1.0.0

[back to package description]

swizzle

import Data.Tuple
import Data.Swizzle qualified as Swz
import Data.Swizzle.TH

nums :: (Int, Int, Int, Int, Int, Int, Int, Int, Int, Int)
nums = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

foo :: (Int, Int, Int, Int)
foo = Swz.zyxw nums -- (3, 2, 1, 0)

foo2, foo3, foo4, foo5, foo9 :: Solo Int
foo2 = Swz.z nums -- 2
foo3 = Swz.w nums -- 3
foo4 = Swz.v nums -- 4
foo5 = Swz.u nums -- 5
foo9 = Swz.q nums -- 9

swizzle "wyvyuqztuwurqsq"

bar = wyvyuqztuwurqsq (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
	-- (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9)
import GHC.Generics
import Data.Tuple
import Data.Swizzle qualified as Swz
import Data.Swizzle.Class

newtype Red = Red Double deriving Show
newtype Green = Green Double deriving Show
newtype Blue = Blue Double deriving Show
newtype Alpha = Alpha Double deriving Show

data Argb = Argb Alpha Red Green Blue deriving (Show, Generic)

instance Swizzle1 Argb where type X Argb = Alpha
instance Swizzle2 Argb where type Y Argb = Red
instance Swizzle3 Argb where type Z Argb = Green
instance Swizzle4 Argb where type W Argb = Blue

sample :: Argb
sample = Argb (Alpha 0.5) (Red 0.9) (Green 0.3) (Blue 0.2)

red :: Solo Red
red = Swz.y sample

alphaGreen :: (Alpha, Green)
alphaGreen = Swz.xz sample

rgba :: (Red, Green, Blue, Alpha)
rgba = Swz.yzwx sample