Olá pessoal. Tudo certo?!
Voltemos a série sobre desenvolvimento com Haskell para programadores C#. Se está chegando agora, recomendo ver um dos posts anteriores:
Nesse post, falo sobre como “organizar” o código em aplicações Haskell usando módulos.
Os exemplos que utilizo foram inspirados no livro Learn You a Haskell for Great Good!: A Beginner’s Guide.
Para aprender, comecemos com um exemplo simples. Veja:
module Geometry ( cubeVolume, cubeArea, cuboidVolume, cuboidArea ) where cubeVolume :: Float -> Float cubeVolume side = cuboidVolume side side side cubeArea :: Float -> Float cubeArea side = cuboidArea side side side cuboidVolume :: Float -> Float -> Float -> Float cuboidVolume a b c = rectArea a b * c cuboidArea :: Float -> Float -> Float -> Float cuboidArea a b c = rectArea a b * 2 + rectArea a c * 2 + rectArea c b * 2 rectArea :: Float -> Float -> Float rectArea a b = a * b
O que há para destacar:
C# não possui suporte nativo para módulos. Eis minha implementação com classes estáticas:
public static class Geometry
{
public static float CubeVolume(float side)
{
return CuboidVolume(side, side, side);
}
public static float CubeArea(float side)
{
return CuboidArea(side, side, side);
}
public static float CuboidVolume(float a, float b, float c)
{
return RectArea(a, b)*c;
}
public static float CuboidArea(float a, float b, float c)
{
return RectArea(a, b)*2 + RectArea(a, c)*2 + RectArea(c, b)*2;
}
private static float RectArea(float a, float b)
{
return a*b;
}
}
Pegou a idéia?
Abaixo, uso o módulo no WinHugs.
Era isso.