hopfield-0.1.0.0: src/Hopfield/Common.hs
{-# LANGUAGE PatternGuards, ExistentialQuantification #-}
module Hopfield.Common where
-- This module contains data types and functions specific to the project
-- which are used for all different types of networks we support
import Data.Vector (Vector)
type Weights = Vector (Vector Double)
type Pattern = Vector Int
type Bias = Vector Double
-- Data type used trought the project to choose a network to use
-- Boltzmann corresponds to the new method and CBoltzmann to the Classification
-- Boltzmann machine
data Method = Hopfield | Boltzmann | CBoltzmann
deriving (Eq, Enum, Ord, Show)
-- http://www.haskell.org/haskellwiki/Heterogenous_collections
data Showable = forall a . Show a => MkShowable a
instance Show Showable
where showsPrec p (MkShowable a) = showsPrec p a
pack :: Show a => a -> Showable
pack = MkShowable
packL :: Show a => [a] -> [Showable]
packL = map pack
-- flips a bit according to the method employed, as patterns
-- take different values if they are Hopfield or RBM.
flipBit :: Method -> Int -> Int
flipBit Hopfield x = - x
flipBit _ x = 1 - x