2015-07-17 3 views
0

образец кода, который показывает, как два объекта могут быть сравнены в Python с использованием == оператора:Пайтона, в земле Haskell

class Person: 
    def __init__(name): 
    this.name = name 

    def __eq__(nextPerson): 
    if this.name == nextPerson.name: 
     return True 
    return False 

if __name__ == '__main__': 
    personOne = Person("saran") 
    personTwo = Person("madhavan") 
    personThree = Person("saran") 
    print personOne == personTwo 
    print personOne == personThree 

Это должно напечатать:

False 
True 

Как я могу напишите приведенный выше код, используя Eq typeclass в Haskell?

+3

Итак ... что вы пробовали? Что вы знаете о «Eq» Haskell и каков ваш эквивалент «Person» в haskell? Я могу догадаться, но это должно быть частью вопроса. – Cubic

+0

Я думаю, что у вашего Python есть некоторые проблемы .... – dsign

+1

Python не имеет ключевого слова 'new'; также 'if : return True; else: return False' сводится только к 'return '. –

ответ

4
data Person = Person { name::String } deriving (Show) 

instance Eq Person where 
    x == y = (name x) == (name y) 

main = do 
    let personOne = Person { name="saran" } 
    let personTwo = Person { name="madhavan" } 
    let personThree = Person { name="saran" } 
    print $ personOne == personTwo 
    print $ personOne == personThree 
+5

. Я думаю, что стоит отметить, что этот экземпляр Eq эквивалентен автоматически полученному. – Cubic

+0

@ Кубический: В этом случае да. В более общем случае, когда есть поля, отличные от 'name', no. (Не говорите, что вы ошибаетесь, просто объясняя, почему я решил реализовать «Eq».) – Amadan