История изменений
Исправление AndreyKl, (текущая версия) :
в общем не уверен верно ли понял задачу, но если верно, то вот, самый «обычный» способ
module Ao where
data Ao = Apple Int | Orange Int
difference :: Ao -> Ao -> String
difference (Apple a) (Apple b) | a == b = "both are apples, weights are equal"
difference (Apple _) (Apple _) | otherwise = "both are apples, but weights are different"
difference (Orange a) (Orange b) | a == b = "both are oranges, weights are equal"
difference (Orange _) (Orange _) | otherwise = "both are oranges, but weights are different"
difference (Apple _) _ = "first is apple, second is orange"
difference _ _ = "first is orange, second is apple"
Исходная версия AndreyKl, :
в общем не уверен верно ли понял задачу, но если верно, то вот, самый простой способ
module Ao where
data Ao = Apple Int | Orange Int
difference :: Ao -> Ao -> String
difference (Apple a) (Apple b) | a == b = "both are apples, weights are equal"
difference (Apple _) (Apple _) | otherwise = "both are apples, but weights are different"
difference (Orange a) (Orange b) | a == b = "both are oranges, weights are equal"
difference (Orange _) (Orange _) | otherwise = "both are oranges, but weights are different"
difference (Apple _) _ = "first is apple, second is orange"
difference _ _ = "first is orange, second is apple"