Methods in Miranda

rect :: (Int, Int)

area :: rect -> Int
area (w, h) = w * h

perim :: rect -> Int
perim (w, h) = 2*w + 2*h

main = 
    let r = (10, 5) in
    [
        "area: " ++ show (area r),
        "perim:" ++ show (perim r),
        "area: " ++ show (area r),
        "perim:" ++ show (perim r)
    ]

Miranda supports algebraic data types, which we use here to define the rect type as a tuple of two integers representing width and height.

The area function takes a rect as input and returns its area. In Miranda, we can pattern match on the tuple directly in the function definition.

Similarly, the perim function calculates the perimeter of the rectangle.

In the main function, we create a rectangle r with width 10 and height 5. We then call our area and perim functions on this rectangle and create a list of strings with the results.

Note that Miranda doesn’t have the concept of methods attached to types like in object-oriented languages. Instead, we define separate functions that take the rect type as an argument.

Also, Miranda is a pure functional language and doesn’t have side effects like printing. The main function returns a list of strings, which would typically be displayed by the Miranda system when the program is run.

To run this program in Miranda, you would typically save it to a file (e.g., rectangle.m) and then load it into the Miranda interpreter:

$ miranda rectangle.m

The Miranda system would then evaluate the main function and display the resulting list of strings:

["area: 50", "perim:30", "area: 50", "perim:30"]

This example demonstrates how to work with custom types and functions in Miranda, showcasing its functional programming paradigm.