diff options
Diffstat (limited to 'testsuite/tests/perf/compiler/T10421a_Form.hs')
-rw-r--r-- | testsuite/tests/perf/compiler/T10421a_Form.hs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/testsuite/tests/perf/compiler/T10421a_Form.hs b/testsuite/tests/perf/compiler/T10421a_Form.hs new file mode 100644 index 0000000000..165768b6e9 --- /dev/null +++ b/testsuite/tests/perf/compiler/T10421a_Form.hs @@ -0,0 +1,19 @@ +-- Form.hs +module T10421a_Form where + +import Control.Applicative + +data FormResult a = FormMissing + | FormFailure [String] + | FormSuccess a +instance Functor FormResult where + fmap _ FormMissing = FormMissing + fmap _ (FormFailure errs) = FormFailure errs + fmap f (FormSuccess a) = FormSuccess $ f a +instance Applicative FormResult where + pure = FormSuccess + (FormSuccess f) <*> (FormSuccess g) = FormSuccess $ f g + (FormFailure x) <*> (FormFailure y) = FormFailure $ x ++ y + (FormFailure x) <*> _ = FormFailure x + _ <*> (FormFailure y) = FormFailure y + _ <*> _ = FormMissing |