Guest User

Untitled

a guest
Nov 17th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. module Equiv where
  2.  
  3. import Prelude
  4.  
  5. import Control.Monad.Eff.JQuery (off)
  6. import Data.Array ((:))
  7. import Data.CommutativeRing (class CommutativeRing)
  8. import Data.Enum (class BoundedEnum, class Enum, Cardinality(..), cardinality, toEnum)
  9. import Data.Eq (class Eq)
  10. import Data.EuclideanRing (class EuclideanRing, degree)
  11. import Data.Foldable (all)
  12. import Data.Functor (class Functor, map)
  13. import Data.Generic (class Generic)
  14. import Data.Generic.Rep.Show (genericShow)
  15. import Data.HeytingAlgebra (not, (&&), (||))
  16. import Data.Maybe (Maybe(..))
  17. import Data.Ring (class Ring)
  18. import Data.Semiring (class Semiring)
  19. import Data.Show (class Show)
  20.  
  21.  
  22. class Equiv a where
  23. equiv :: a -> a -> Boolean
  24.  
  25. infix 5 equiv as ≡
  26.  
  27. instance equivEq :: Eq a => Equiv a where
  28. equiv a b = a == b
  29.  
  30.  
  31. generateValues :: ∀a. (Int -> Maybe a) -> Int -> Array a -> Array a
  32. generateValues f n acc = case (f n) of
  33. Just a -> generateValues f (n+1) (a:acc)
  34. Nothing -> acc
  35.  
  36. instance equivEnum :: (BoundedEnum a, Equiv b) => Equiv (a -> b) where
  37. equiv a b = all (\v -> a v ≡ b v) (generateValues toEnum 0 [])
  38.  
  39. data Values = D1 | D2 | D3 | D4
  40.  
  41. rotate2 :: Values -> Values
  42. rotate2 D1 = D3
  43. rotate2 D2 = D4
  44. rotate2 D3 = D1
  45. rotate2 D4 = D2
Add Comment
Please, Sign In to add comment