{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Data.CRF.Chain1.Dataset.Internal
( Ob (..)
, Lb (..)
, X (..)
, mkX
, unX
, Xs
, Y (..)
, mkY
, unY
, Ys
) where
import Data.Binary (Binary)
import Data.Ix (Ix)
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
import Data.Vector.Unboxed.Deriving
newtype Ob = Ob { unOb :: Int }
deriving ( Show, Read, Eq, Ord, Binary )
derivingUnbox "Ob" [t| Ob -> Int |] [| unOb |] [| Ob |]
newtype Lb = Lb { unLb :: Int }
deriving ( Show, Read, Eq, Ord, Binary, Num, Ix )
derivingUnbox "Lb" [t| Lb -> Int |] [| unLb |] [| Lb |]
newtype X = X { _unX :: U.Vector Ob }
deriving (Show, Read, Eq, Ord)
mkX :: [Ob] -> X
mkX = X . U.fromList
{-# INLINE mkX #-}
unX :: X -> [Ob]
unX = U.toList . _unX
{-# INLINE unX #-}
type Xs = V.Vector X
newtype Y = Y { _unY :: U.Vector (Lb, Double) }
deriving (Show, Read, Eq, Ord)
mkY :: [(Lb, Double)] -> Y
mkY = Y . U.fromList
{-# INLINE mkY #-}
unY :: Y -> [(Lb, Double)]
unY = U.toList . _unY
{-# INLINE unY #-}
type Ys = V.Vector Y