module Huzzy.Base.Systems
( FRule(..)
, Defuzzifier(..)
) where
import Huzzy.Base.Sets
class Fuzzy a => FRule a where
type Antecedent a
(=*>) :: Antecedent a -> a -> a
(=|>) :: Antecedent a -> a -> a
weight :: a -> Double -> a
instance FRule Double where
type Antecedent Double = Double
(=*>) a b = a * b
(=|>) a b = a `min` b
weight a b = a * b
instance FRule b => FRule (a -> b) where
type Antecedent (a -> b) = Antecedent b
(=*>) a b = \x -> a =*> b x
(=|>) a b = \x -> a =|> b x
weight a b = \x -> a x `weight` b
instance FRule (MF a) where
type Antecedent (MF a) = Double
(=*>) a (MF f) = MF (\x -> a =*> f x)
(=|>) a (MF f) = MF (\x -> a =|> f x)
weight (MF f) b = MF (\x -> f x `weight` b)
class FRule a => Defuzzifier a where
type Result a
centroid :: a -> Result a