Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Equiv where
- import Prelude
- import Control.Monad.Eff.JQuery (off)
- import Data.Array ((:))
- import Data.CommutativeRing (class CommutativeRing)
- import Data.Enum (class BoundedEnum, class Enum, Cardinality(..), cardinality, toEnum)
- import Data.Eq (class Eq)
- import Data.EuclideanRing (class EuclideanRing, degree)
- import Data.Foldable (all)
- import Data.Functor (class Functor, map)
- import Data.Generic (class Generic)
- import Data.Generic.Rep.Show (genericShow)
- import Data.HeytingAlgebra (not, (&&), (||))
- import Data.Maybe (Maybe(..))
- import Data.Ring (class Ring)
- import Data.Semiring (class Semiring)
- import Data.Show (class Show)
- class Equiv a where
- equiv :: a -> a -> Boolean
- infix 5 equiv as ≡
- instance equivEq :: Eq a => Equiv a where
- equiv a b = a == b
- generateValues :: ∀a. (Int -> Maybe a) -> Int -> Array a -> Array a
- generateValues f n acc = case (f n) of
- Just a -> generateValues f (n+1) (a:acc)
- Nothing -> acc
- instance equivEnum :: (BoundedEnum a, Equiv b) => Equiv (a -> b) where
- equiv a b = all (\v -> a v ≡ b v) (generateValues toEnum 0 [])
- data Values = D1 | D2 | D3 | D4
- rotate2 :: Values -> Values
- rotate2 D1 = D3
- rotate2 D2 = D4
- rotate2 D3 = D1
- rotate2 D4 = D2
Add Comment
Please, Sign In to add comment