@@ -670,14 +670,12 @@ record Core t where
670
670
runCore : IO (Either Error t)
671
671
672
672
export
673
- coreRun : Core a ->
674
- (Error -> IO b) -> (a -> IO b) -> IO b
675
- coreRun (MkCore act) err ok
676
- = either err ok ! act
673
+ coreRun : Core a -> (Error -> IO b) -> (a -> IO b) -> IO b
674
+ coreRun (MkCore act) err ok = either err ok ! act
677
675
678
676
export
679
677
coreFail : Error -> Core a
680
- coreFail e = MkCore ( pure ( Left e))
678
+ coreFail = MkCore . pure . Left
681
679
682
680
export
683
681
wrapError : (Error -> Error) -> Core a -> Core a
@@ -687,8 +685,7 @@ wrapError fe (MkCore prog) = MkCore $ mapFst fe <$> prog
687
685
export
688
686
%inline
689
687
coreLift : IO a -> Core a
690
- coreLift op = MkCore (do op' <- op
691
- pure (Right op'))
688
+ coreLift = MkCore . map Right
692
689
693
690
{- Monad, Applicative, Traversable are specialised by hand for Core.
694
691
In theory, this shouldn't be necessary, but it turns out that Idris 1 doesn't
@@ -702,11 +699,11 @@ in the next version (i.e., in this project...)! -}
702
699
-- Functor (specialised)
703
700
export % inline
704
701
map : (a -> b) -> Core a -> Core b
705
- map f (MkCore a) = MkCore ( map (map f) a)
702
+ map f (MkCore a) = MkCore $ map (map f) a
706
703
707
704
export % inline
708
705
(<$> ) : (a -> b) -> Core a -> Core b
709
- (<$> ) f ( MkCore a) = MkCore ( map ( map f) a)
706
+ (<$> ) = map
710
707
711
708
export % inline
712
709
(<$ ) : b -> Core a -> Core b
@@ -718,7 +715,7 @@ export %inline
718
715
719
716
export % inline
720
717
ignore : Core a -> Core ()
721
- ignore = map ( const () )
718
+ ignore = map $ const ()
722
719
723
720
-- This would be better if we restrict it to a limited set of IO operations
724
721
export
@@ -729,11 +726,9 @@ coreLift_ op = ignore (coreLift op)
729
726
-- Monad (specialised)
730
727
export % inline
731
728
(>>= ) : Core a -> (a -> Core b) -> Core b
732
- (>>= ) (MkCore act) f
733
- = MkCore (act >>=
734
- \ case
735
- Left err => pure $ Left err
736
- Right val => runCore $ f val)
729
+ MkCore act >>= f = MkCore $ act >>= \ case
730
+ Left err => pure $ Left err
731
+ Right val => runCore $ f val
737
732
738
733
export % inline
739
734
(>> ) : Core () -> Core a -> Core a
@@ -757,26 +752,25 @@ export %inline
757
752
-- Applicative (specialised)
758
753
export % inline
759
754
pure : a -> Core a
760
- pure x = MkCore (pure ( pure x))
755
+ pure = MkCore . pure . Right
761
756
762
757
export
763
758
(<*> ) : Core (a -> b) -> Core a -> Core b
764
- ( <*> ) ( MkCore f) ( MkCore a) = MkCore [| f <*> a | ]
759
+ MkCore f <*> MkCore a = MkCore [| f <*> a | ]
765
760
766
761
export
767
762
(*> ) : Core a -> Core b -> Core b
768
- ( *> ) ( MkCore a) ( MkCore b) = MkCore [| a *> b | ]
763
+ MkCore a *> MkCore b = MkCore [| a *> b | ]
769
764
770
765
export
771
766
(<* ) : Core a -> Core b -> Core a
772
- ( <* ) ( MkCore a) ( MkCore b) = MkCore [| a <* b | ]
767
+ MkCore a <* MkCore b = MkCore [| a <* b | ]
773
768
774
769
export % inline
775
770
when : Bool -> Lazy (Core () ) -> Core ()
776
771
when True f = f
777
772
when False f = pure ()
778
773
779
-
780
774
export % inline
781
775
unless : Bool -> Lazy (Core () ) -> Core ()
782
776
unless = when . not
@@ -811,11 +805,9 @@ interface Catchable m t | m where
811
805
812
806
export
813
807
Catchable Core Error where
814
- catch (MkCore prog) h
815
- = MkCore ( do p' <- prog
816
- case p' of
817
- Left e => let MkCore he = h e in he
818
- Right val => pure (Right val))
808
+ catch (MkCore prog) h = MkCore $ prog >>= \ case
809
+ Left e => runCore (h e)
810
+ Right val => pure (Right val)
819
811
breakpoint (MkCore prog) = MkCore (pure <$> prog)
820
812
throw = coreFail
821
813
@@ -827,8 +819,7 @@ foldlC fm a0 = foldl (\ma,b => ma >>= flip fm b) (pure a0)
827
819
-- Traversable (specialised)
828
820
traverse' : (a -> Core b) -> List a -> List b -> Core (List b)
829
821
traverse' f [] acc = pure (reverse acc)
830
- traverse' f (x :: xs) acc
831
- = traverse' f xs (! (f x) :: acc)
822
+ traverse' f (x :: xs) acc = traverse' f xs (! (f x) :: acc)
832
823
833
824
%inline
834
825
export
@@ -851,15 +842,12 @@ for = flip traverse
851
842
852
843
export
853
844
traverseList1 : (a -> Core b) -> List1 a -> Core (List1 b)
854
- traverseList1 f xxs
855
- = let x = head xxs
856
- xs = tail xxs in
857
- [| f x ::: traverse f xs | ]
845
+ traverseList1 f (x ::: xs) = [| f x ::: traverse f xs | ]
858
846
859
847
export
860
848
traverseSnocList : (a -> Core b) -> SnocList a -> Core (SnocList b)
861
849
traverseSnocList f [< ] = pure [< ]
862
- traverseSnocList f (as : < a) = (:<) <$> traverseSnocList f as <*> f a
850
+ traverseSnocList f (as : < a) = [| traverseSnocList f as :< f a |]
863
851
864
852
export
865
853
traverseVect : (a -> Core b) -> Vect n a -> Core (Vect n b)
@@ -879,9 +867,8 @@ traversePair f (w, a) = (w,) <$> f a
879
867
export
880
868
traverse_ : (a -> Core b) -> List a -> Core ()
881
869
traverse_ f [] = pure ()
882
- traverse_ f (x :: xs)
883
- = Core . do ignore (f x)
884
- traverse_ f xs
870
+ traverse_ f (x :: xs) = ignore (f x) >> traverse_ f xs
871
+
885
872
%inline
886
873
export
887
874
for_ : List a -> (a -> Core () ) -> Core ()
@@ -890,20 +877,12 @@ for_ = flip traverse_
890
877
%inline
891
878
export
892
879
sequence : List (Core a) -> Core (List a)
893
- sequence (x :: xs)
894
- = do
895
- x' <- x
896
- xs' <- sequence xs
897
- pure (x' :: xs')
880
+ sequence (x :: xs) = [| x :: sequence xs | ]
898
881
sequence [] = pure []
899
882
900
883
export
901
884
traverseList1_ : (a -> Core b) -> List1 a -> Core ()
902
- traverseList1_ f xxs
903
- = do let x = head xxs
904
- let xs = tail xxs
905
- ignore (f x)
906
- traverse_ f xs
885
+ traverseList1_ f (x ::: xs) = ignore (f x) >> traverse_ f xs
907
886
908
887
%inline export
909
888
traverseFC : (a -> Core b) -> WithFC a -> Core (WithFC b)
0 commit comments