2016-08-31 4 views
-1

Wie kann ich einige Werte in einem eigenen erstellten Datentyp speichern? Nach dem Speichern sollten verschiedene Module Zugriff auf diese Werte haben.Weitergabe von Informationen durch verschiedene Module Haskell

Es wäre schön, wenn Sie mir einig Code-Beispiel zeigen können, weil ich in Haskell ganz neu bin

Der Code habe ich bisher: Das zweite Modul (das nicht das Haupt Zeug hat)

data SimuInfo = Information { 
       massSaved:: Double 
       } deriving Show 

initialization:: Double-> SimuInfo 
initialization m = Information{ 
         massSaved = m 
        } 

--a example function, which uses the data 
example:: Double -> SimuInfo -> Double 
example a information = 2* a * b 
        where 
        b = massSaved information 

Dies ist der Code in dem ersten Modul, das den Datentyp verwendet:

import Simufunc -- the import of the 2nd module 



example2 :: Double -> Double 
example2 a = example a Information 

Dies wird die folgende Fehlermeldung erhalte ich:

Couldn't match expected type ‘SimuInfo’ 
       with actual type ‘Double -> SimuInfo’ 
    Probable cause: ‘Information’ is applied to too few arguments 
    In the second argument of ‘example’, namely ‘Information’ 
    In the expression: example a Information 

Vielen Dank im Voraus

+0

Bitte beschränken Stapel O Verflow-Fragen, um sich auf eine einzelne Frage zu konzentrieren. Ihre Frage zur Tastatureingabe sollte wahrscheinlich auf eine eigene Frage gestellt werden, oder [lesen Sie hier Ein-/Ausgabe] (http://learnyouahaskell.com/input-and-output) –

Antwort

1

Die Fehlermeldung Sie wird darüber informiert, dass example2 ungültig, da der zweite Parameter, den Sie example vorbei sind zu soll Seien Sie ein Double, aber Sie übergeben stattdessen eine Funktion.

example2 a = example a Information 

Information ist ein Konstruktor, was bedeutet, dass es auch eine Funktion, die eine Double als Parameter und gibt einen Wert SimuInfo.

Sie haben eine initialization Funktion, die die gleiche Sache wie der Information Konstruktor tut: Es ist eine Funktion, die einen Double als Parameter und gibt einen SimuInfo Wert annimmt.

Daher müssen Sie example2 aktualisieren, um die fehlende Double als Eingabe für Information hinzuzufügen. Hier ist ein Beispiel, dies zu erreichen durch einen anderen Parameter example2 Zugabe:

example2 :: Double -> Double -> Double 
example2 a infoVal = example a (Information infoVal) 

Die oben auch geschrieben werden können, Ihre Helfer-Funktion, initialization

example2 :: Double -> Double -> Double 
example2 a infoVal = example a (initialization infoVal) 

Wenn Sie einen „default“ Wert haben wollen für SimuInfo, die Sie von überall (in anderen Sprachen auf einen konstanten ähnlich) zugreifen können, können Sie es wie so erklären:

zeroedInformation :: SimuInfo 
zeroedInformation = Information 0 
Verwandte Themen