module Huzzy.TypeOne.Systems where

import Huzzy.Base.Sets
import Huzzy.Base.Systems
import Huzzy.TypeOne.Sets

instance FRule (T1Set a) where
    type Antecedent (T1Set a) = Double
    (=*>) a t1s = t1s { mf = a =*> (mf t1s)}
    (=|>) a t1s = t1s { mf = a =|> (mf t1s)}
    weight t1s b = t1s {mf = (mf t1s) `weight` b}

instance Defuzzifier (T1Set Double) where
    type Result (T1Set Double) = Double
    centroid t1s = sum (zipWith (*) dom' fdom) / sum fdom
                    where
                        dom'     = dom t1s
                        (MF f)  = mf t1s
                        fdom     = map f dom'