1/1: Building DocImpl (DocImpl.idr)
Main> interface Main.Happy : Type -> Type
  Parameters: t
  Methods:
    happy : t
  Implementations:
    Happy Nat
    Happy Bool
Main> happy : Bool
happy = True
Main> happy : Nat
happy = 0
Main> show : String -> String
show cs = strCons '"' (showLitString (unpack cs) "\"")

showPrec : Prec -> String -> String
showPrec _ x = show x
Main> Could not find an implementation for Show Type
Main> Error: Undefined name NAt. 

(Interactive):1:14--1:17
 1 | :printdef Eq NAt
                  ^^^
Did you mean any of: Nat, or Not?
Main> (==) : Nat -> Nat -> Bool
(==) = equalNat

(/=) : Nat -> Nat -> Bool
x /= y = not (x == y)
Main> (==) : Eq a => List a -> List a -> Bool
[] == [] = True
(x :: xs) == (y :: ys) = (x == y) && Delay (xs == ys)
_ == _ = False

(/=) : Eq a => List a -> List a -> Bool
x /= y = not (x == y)
Main> (==) : Double -> Double -> Bool
x == y = intToBool (prim__eq_Double x y)

(/=) : Double -> Double -> Bool
x /= y = not (x == y)
Main> map : (a -> b) -> Maybe a -> Maybe b
map f (Just x) = Just (f x)
map f Nothing = Nothing
Main> foldr : (elem -> acc -> acc) -> acc -> Either e elem -> acc
foldr f acc (Left _) = acc
foldr f acc (Right x) = f x acc

foldl : (acc -> elem -> acc) -> acc -> Either e elem -> acc
foldl f z t = foldr (flip (.) . flip f) id t z

null : Either e elem -> Bool
null (Left _) = True
null (Right _) = False

foldlM : Monad m => (acc -> elem -> m acc) -> acc -> Either e elem -> m acc
foldlM fm a0 = foldl (\ma, b => ma >>= flip fm b) (pure a0)

toList : Either e elem -> List elem
toList = foldr (::) []

foldMap : Monoid m => (a -> m) -> Either e a -> m
foldMap f = foldr ((<+>) . f) neutral
Main> Imported module Data.Bits
Main> 0 Index : Type
Index = Nat

(.&.) : Integer -> Integer -> Integer
(.&.) = prim__and_Integer

(.|.) : Integer -> Integer -> Integer
(.|.) = prim__or_Integer

xor : Integer -> Integer -> Integer
xor = prim__xor_Integer

shiftL : Integer -> Index -> Integer
(x `shiftL`) = prim__shl_Integer x . natToInteger

shiftR : Integer -> Index -> Integer
(x `shiftR`) = prim__shr_Integer x . natToInteger

bit : Index -> Integer
bit = \arg => 1 `shiftL` arg

zeroBits : Integer
zeroBits = 0

complement : Integer -> Integer
complement = (oneBits `xor`)

oneBits : Integer
oneBits = -1

complementBit : Integer -> Index -> Integer
complementBit x i = x `xor` bit i

clearBit : Integer -> Index -> Integer
clearBit x i = x `xor` (bit i .&. x)

testBit : Integer -> Index -> Bool
testBit x i = (x .&. bit i) /= 0

setBit : Integer -> Index -> Integer
setBit x i = x .|. bit i
Main> Bye for now!
1/1: Building List (List.idr)
List> interface List.Monoid : Type -> Type
  Parameters: ty
  Constructor: MkMonoid
    Users can hand-craft their own monoid implementations
  Methods:
    neutral : ty
    (++) : ty -> ty -> ty
      Fixity Declaration: infixr operator, level 5
  Implementation: Monoid (List a)
List> neutral : List a
neutral = []

(++) : List a -> List a -> List a
xs ++ ys = case xs of
  { [] => ys
  ; x :: xs => let ih = xs ++ ys in x :: ih
  }
List> 
Bye for now!
