HappyTree-0.2018.1.8: Type Safe and End to End Decision Tree

Safe HaskellNone
LanguageHaskell2010

Data.HappyTree

Documentation

type family RevAppend (a :: [a]) (a :: [a]) :: [a] where ... Source #

Equations

RevAppend '[] x = x 
RevAppend ((:) x xs) n = Apply (Apply RevAppendSym0 xs) (Apply (Apply (:$) x) n) 

data RevAppendSym0 (l :: TyFun [a6989586621679075741] (TyFun [a6989586621679075741] [a6989586621679075741] -> Type)) Source #

Instances

SuppressUnusedWarnings (TyFun [a6989586621679075741] (TyFun [a6989586621679075741] [a6989586621679075741] -> Type) -> *) (RevAppendSym0 a6989586621679075741) Source # 

Methods

suppressUnusedWarnings :: Proxy (RevAppendSym0 a6989586621679075741) t -> () #

type Apply [a6989586621679075741] (TyFun [a6989586621679075741] [a6989586621679075741] -> Type) (RevAppendSym0 a6989586621679075741) l Source # 
type Apply [a6989586621679075741] (TyFun [a6989586621679075741] [a6989586621679075741] -> Type) (RevAppendSym0 a6989586621679075741) l = RevAppendSym1 a6989586621679075741 l

data RevAppendSym1 (l :: [a6989586621679075741]) (l :: TyFun [a6989586621679075741] [a6989586621679075741]) Source #

Instances

SuppressUnusedWarnings ([a6989586621679075741] -> TyFun [a6989586621679075741] [a6989586621679075741] -> *) (RevAppendSym1 a6989586621679075741) Source # 

Methods

suppressUnusedWarnings :: Proxy (RevAppendSym1 a6989586621679075741) t -> () #

type Apply [a] [a] (RevAppendSym1 a l1) l2 Source # 
type Apply [a] [a] (RevAppendSym1 a l1) l2 = RevAppend a l1 l2

type RevAppendSym2 (t :: [a6989586621679075741]) (t :: [a6989586621679075741]) = RevAppend t t Source #

type family SelElemAux (a :: [a]) (a :: [a]) :: [(a, [a])] where ... Source #

Equations

SelElemAux l '[] = '[] 
SelElemAux l ((:) r rs) = Apply (Apply (:$) (Apply (Apply Tuple2Sym0 r) (Apply (Apply RevAppendSym0 l) rs))) (Apply (Apply SelElemAuxSym0 (Apply (Apply (:$) r) l)) rs) 

data SelElemAuxSym0 (l :: TyFun [a6989586621679075740] (TyFun [a6989586621679075740] [(a6989586621679075740, [a6989586621679075740])] -> Type)) Source #

Instances

SuppressUnusedWarnings (TyFun [a6989586621679075740] (TyFun [a6989586621679075740] [(a6989586621679075740, [a6989586621679075740])] -> Type) -> *) (SelElemAuxSym0 a6989586621679075740) Source # 

Methods

suppressUnusedWarnings :: Proxy (SelElemAuxSym0 a6989586621679075740) t -> () #

type Apply [a6989586621679075740] (TyFun [a6989586621679075740] [(a6989586621679075740, [a6989586621679075740])] -> Type) (SelElemAuxSym0 a6989586621679075740) l Source # 
type Apply [a6989586621679075740] (TyFun [a6989586621679075740] [(a6989586621679075740, [a6989586621679075740])] -> Type) (SelElemAuxSym0 a6989586621679075740) l = SelElemAuxSym1 a6989586621679075740 l

data SelElemAuxSym1 (l :: [a6989586621679075740]) (l :: TyFun [a6989586621679075740] [(a6989586621679075740, [a6989586621679075740])]) Source #

Instances

SuppressUnusedWarnings ([a6989586621679075740] -> TyFun [a6989586621679075740] [(a6989586621679075740, [a6989586621679075740])] -> *) (SelElemAuxSym1 a6989586621679075740) Source # 

Methods

suppressUnusedWarnings :: Proxy (SelElemAuxSym1 a6989586621679075740) t -> () #

type Apply [a] [(a, [a])] (SelElemAuxSym1 a l1) l2 Source # 
type Apply [a] [(a, [a])] (SelElemAuxSym1 a l1) l2 = SelElemAux a l1 l2

type SelElemAuxSym2 (t :: [a6989586621679075740]) (t :: [a6989586621679075740]) = SelElemAux t t Source #

type family SelElem (a :: [a]) :: [(a, [a])] where ... Source #

Equations

SelElem a_6989586621679076669 = Apply (Apply SelElemAuxSym0 '[]) a_6989586621679076669 

type SelElemSym1 (t :: [a6989586621679075739]) = SelElem t Source #

data SelElemSym0 (l :: TyFun [a6989586621679075739] [(a6989586621679075739, [a6989586621679075739])]) Source #

Instances

SuppressUnusedWarnings (TyFun [a6989586621679075739] [(a6989586621679075739, [a6989586621679075739])] -> *) (SelElemSym0 a6989586621679075739) Source # 

Methods

suppressUnusedWarnings :: Proxy (SelElemSym0 a6989586621679075739) t -> () #

type Apply [a] [(a, [a])] (SelElemSym0 a) l Source # 
type Apply [a] [(a, [a])] (SelElemSym0 a) l = SelElem a l

sSelElem :: forall (t :: [a]). Sing t -> Sing (Apply SelElemSym0 t :: [(a, [a])]) Source #

sSelElemAux :: forall (t :: [a]) (t :: [a]). Sing t -> Sing t -> Sing (Apply (Apply SelElemAuxSym0 t) t :: [(a, [a])]) Source #

sRevAppend :: forall (t :: [a]) (t :: [a]). Sing t -> Sing t -> Sing (Apply (Apply RevAppendSym0 t) t :: [a]) Source #

selElem :: [a] -> [(a, [a])] Source #

selElemAux :: [a] -> [a] -> [(a, [a])] Source #

revAppend :: [a] -> [a] -> [a] Source #

takeElemAux :: [a] -> [a] -> [([a], a, [a])] Source #

takeElem :: [a] -> [([a], a, [a])] Source #

data SelElemTypeAux a Source #

Constructors

SelElemTypeAux (Fst a) (NP I (Snd a)) 

npRevAppend :: NP f a -> NP f b -> NP f (RevAppend a b) Source #

sListCons :: Proxy a -> SList b -> SList (a ': b) Source #

npAppend :: NP f a -> NP f b -> NP f (a :++ b) Source #

npToSList :: NP f a -> SList a Source #

newtype SplitOnAux a b c Source #

Constructors

SplitOnAux 

Fields

data SplitOn (b :: *) (x :: (*, [*])) Source #

Constructors

SListI c => SplitOn (Fst x -> SOP I c) (NP (SplitOnAux (Snd x) b) c) 

data DecisionTree (a :: [*]) (b :: *) Source #

Constructors

Leaf (NP I a -> b) 
Split (NS (SplitOn b) (SelElem a)) 

eval :: DecisionTree a b -> NP I a -> b Source #

entropy :: Ord a => [a] -> Double Source #

data IndexAux (l :: k) (r :: k) Source #

Constructors

(l ~ r) => IndexAux 

newtype Index (l :: [k]) (x :: k) Source #

Constructors

Index 

Fields

fromIndex :: SListI l => NP f l -> Index l x -> f x Source #

class GetIndex l x where Source #

Minimal complete definition

getIndex

Methods

getIndex :: Proxy l -> Proxy x -> Index l x Source #

Instances

GetIndex k ((:) k l r) l Source # 

Methods

getIndex :: Proxy [(k ': l) r] l -> Proxy ((k ': l) r) x -> Index ((k ': l) r) l x Source #

GetIndex k r x => GetIndex k ((:) k l r) x Source # 

Methods

getIndex :: Proxy [(k ': l) r] x -> Proxy ((k ': l) r) x -> Index ((k ': l) r) x x Source #

newtype SplitFunAuxAux b d Source #

Constructors

SplitFunAuxAux 

Fields

data SplitFun env a b Source #

Constructors

(SListI2 c, All2 (GetIndex env) c) => SplitFun (a -> SOP I c) (NP (SplitFunAuxAux b) c) 

unitSplitFun :: [b] -> SplitFun env a b Source #

splitFunP :: (SListI2 c, All2 (GetIndex env) c) => Proxy c -> (a -> SOP I c) -> NP (SplitFunAuxAux b) c -> SplitFun env a b Source #

data SplitStrat (env :: [*]) a Source #

Constructors

SplitStrat (forall b. [(a, b)] -> [SplitFun env a b]) 

Instances

Monoid (SplitStrat env a) Source # 

Methods

mempty :: SplitStrat env a #

mappend :: SplitStrat env a -> SplitStrat env a -> SplitStrat env a #

mconcat :: [SplitStrat env a] -> SplitStrat env a #

runSplitFun :: SplitStrat env a -> [(a, b)] -> [SplitFun env a b] Source #

type SplitStrats cur env = NP (SplitStrat env) cur Source #

splitStatic :: (SListI2 c, All2 (GetIndex env) c) => (a -> SOP I c) -> SplitStrat env a Source #

splitOrd :: (Ord a, GetIndex env a) => SplitStrat env a Source #

getIndex2 :: All (GetIndex l) r => SList r -> NP (Index l) r Source #

mode :: Ord a => [a] -> a Source #

nMinOnAux :: Ord b => (forall x. f x -> b) -> NP f a -> Maybe (b, NS f a) Source #

nMinOn :: Ord b => (forall x. f x -> b) -> NP f a -> Maybe (NS f a) Source #

data SelElemTypeAuxIndex env a Source #

Constructors

SelElemTypeAuxIndex (Index env (Fst a)) (NP (Index env) (Snd a)) 

fromSF :: SplitFun (env :: [*]) a b -> Proxy (All (GetIndex env)) Source #

newtype BuildAuxAux a b Source #

Constructors

BuildAuxAux 

Fields

data Score Source #

Constructors

Destructing 
Deciding Double 

Instances

Eq Score Source # 

Methods

(==) :: Score -> Score -> Bool #

(/=) :: Score -> Score -> Bool #

Ord Score Source # 

Methods

compare :: Score -> Score -> Ordering #

(<) :: Score -> Score -> Bool #

(<=) :: Score -> Score -> Bool #

(>) :: Score -> Score -> Bool #

(>=) :: Score -> Score -> Bool #

max :: Score -> Score -> Score #

min :: Score -> Score -> Score #

newtype WithScore b x Source #

Constructors

WithScore 

Fields

buildTree :: (SListI env, Ord b) => SplitStrats env env -> NP (Index env) (Snd a1) -> b -> SplitFun env (Fst a1) (b, NP I (Snd a1)) -> (Score, SplitOn b a1) Source #

buildAux :: (SListI env, Ord b) => NP (Index env) a -> SplitStrats env env -> [(NP I a, b)] -> b -> DecisionTree a b Source #

build :: (All (GetIndex env) a, SListI env, Ord b) => SplitStrats env env -> [(NP I a, b)] -> b -> DecisionTree a b Source #